Скрипт для удаления пробелов и символов в строке

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
PSdok
ст. сержант
Сообщения: 359
Зарегистрирован: 2006-10-05 18:27:56
Откуда: Нижний НОвгород

Скрипт для удаления пробелов и символов в строке

Непрочитанное сообщение PSdok » 2008-08-14 18:45:55

Помогите написать скрипт, на sh, который определяет есть ли в строке символы [, ], /, \, пробел и удаляет их.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скрипт для удаления пробелов и символов в строке

Непрочитанное сообщение zg » 2008-08-14 19:33:20

Код: Выделить всё

zg# echo "Hello/ \W \o/r[]l d!" | sed -e 's/[ \\\/\[]//g' -e 's/]//g'
HelloWorld!
zg#
man sed

PSdok
ст. сержант
Сообщения: 359
Зарегистрирован: 2006-10-05 18:27:56
Откуда: Нижний НОвгород

Re: Скрипт для удаления пробелов и символов в строке

Непрочитанное сообщение PSdok » 2008-08-15 8:26:15

Спасибо.
Но наверно мне надо было забать вопрос по другому.
На писал скрипт для работы с ctorrent.
Суть, скрипт сканирует определенную папку на наличие торрент файлов, проверяет запущены эти торренты или нет и если нет то запускает.

Код: Выделить всё

 cat /usr/local/etc/start_torrent.sh
#!/bin/sh

dpach=/mnt/sata/torrents/
ppach='/usr/local/bin/screen -dmS'
param='/usr/local/bin/ctorrent -p 48148 -S 127.0.0.1:2780'
last="(null)"
ttt=""
#---запускаю ctcs сервер, чтобы можно было через веб интерфейс закачками рулить.
$ppach CTCS /usr/local/etc/torrent/ctcs -u 30 -d 30


cd $dpach
#-- ищу торрент файлы в директории
ls *.torrent|
while read line
do
#----проверяю запущен ли screen с таким именем, если нет то запускаю
ttt=`screen -ls | grep $line | awk '{print $1}'`
if [ -z ${ttt}  ]
    then
    $ppach $line $param ${dpach}$line
     fi
    last=$line
done
exit 0
Но столкнулся с бедой , если в имени файла есть пробелы не срабатывает screen
а если символы []\|/ не работает grep.
В итоге торрент или не запускается или запускается несколько раз.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скрипт для удаления пробелов и символов в строке

Непрочитанное сообщение zg » 2008-08-15 9:23:37

tormozok писал(а):есть пробелы не срабатывает screen
надо использовать кавычки

Код: Выделить всё

screen "$arg"
либо постраскрытие переменных man sh
tormozok писал(а):а если символы []\|/ не работает grep.
их надо экранировать, можно с помощью sed'а. Но я бы писал на php или perl, там есть специальные встроенные функции экранирования.

PSdok
ст. сержант
Сообщения: 359
Зарегистрирован: 2006-10-05 18:27:56
Откуда: Нижний НОвгород

Re: Скрипт для удаления пробелов и символов в строке

Непрочитанное сообщение PSdok » 2008-08-16 21:25:30

Переписал скрипт целиком.

Код: Выделить всё

cat /usr/local/etc/start_torrent2.sh
#!/bin/sh
dpach=/mnt/sata/torrents/
ppach='/usr/local/bin/screen -dmS'
param='/usr/local/bin/ctorrent -p 48148 -S 127.0.0.1:2780'
last="(null)"
#-останавливаю сервер ctcs
ps | grep ctcs | awk '{print $1}' |
while read line
do
    kill $line
done
sleep 5
$ppach CTCS /usr/local/etc/torrent/ctcs -u 30 -d 30

#-закрываю все screen  с торентами
ps | grep ctorrent | awk '{print $1}' |
while read line
do
    kill $line
done
sleep 10
#-проверяю папку с торрент файлами и запускаю их
cd $dpach
ls *.torrent|
while read line
do
    $ppach "$line" $param ${dpach}$line
    last=$line
done
exit 0
(не очень кравсиво но работает. Проблему с пробелами в имени не решил, удаляю пробелы руками)