обработка текущей директории
От: Велимир Россия  
Дата: 28.05.08 16:09
Оценка:
Здравствуйте.
Скрипт должен удалить из каждого файла текущей директории все строчки с вхождением "abc@".
Если я правильно понял, то её необходимо обработать следующей командой:
sed '/abc@/d' "$i" | tee "$i"

где i — имя файла из текущей директории.
Подскажите пожалуйста, как можно получить весь список файлов данной директории?
что не правильно в:

for i in 'ls' do 
sed '/abc@/d' "$i" | tee "$i"
done
?
shell solaris
Re: обработка текущей директории
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 28.05.08 16:21
Оценка:
Здравствуйте, Велимир, Вы писали:

В>Подскажите пожалуйста, как можно получить весь список файлов данной директории?


find'ом.

В Линуксе я бы сделал так:

find dir -mindepth 1 -maxdepth 1 -type f -exec sed -i '/abc@/d' {} \;


В Солярисе (где sed не поддерживает опции -i и не установлен GNU sed), видимо, как-то так:

find dir -mindepth 1 -maxdepth 1 -type f |
while read FILE; do
sed '/abc@/d' "$FILE" >"${FILE}.tmp" && mv "${FILE}.tmp" "$FILE"
done


Хотя можно вместо sed'а использовать perl -pie, но я не знаю как там строчку удалить (но точно можно).
Re: обработка текущей директории
От: vnp  
Дата: 28.05.08 16:24
Оценка:
Здравствуйте, Велимир, Вы писали:

В>Здравствуйте.

В>Скрипт должен удалить из каждого файла текущей директории все строчки с вхождением "abc@".
В>Если я правильно понял, то её необходимо обработать следующей командой:
В>
В>sed '/abc@/d' "$i" | tee "$i"
В>

В>где i — имя файла из текущей директории.
В>Подскажите пожалуйста, как можно получить весь список файлов данной директории?
В>что не правильно в:

В>
В>for i in 'ls' do 
В>sed '/abc@/d' "$i" | tee "$i"
В>done
В>
?


Кавычки вокруг 'ls'. Поскольку вы хотите, чтобы ls выполнилось, нужны "бэк-тики", `ls` (которые в левом верхнем углу клавиатуры, под тильдой). Разумеется, надо принять меры против файлов с пробелами в имени ("`ls`"), и директорий.
Кроме того, я бы поостерегся делать такой конвеер. Есть шанс, что tee погубит файл до того, как sed до него доберется. Предпочтительнее sed -i.
Если ваш sed не поддерживает -i, то понадобится временный файл, типа

sed -e '/abc@/d' "$i" > tmp
mv tmp $i
Re[2]: обработка текущей директории
От: Велимир Россия  
Дата: 28.05.08 17:09
Оценка:
Здравствуйте, vnp, Вы писали:

vnp>Кавычки вокруг 'ls'. Поскольку вы хотите, чтобы ls выполнилось, нужны "бэк-тики", `ls` (которые в левом верхнем углу клавиатуры, под тильдой). Разумеется, надо принять меры против файлов с пробелами в имени ("`ls`"), и директорий.


Вы имели ввиду что — то вроде(имена директорий по умолчанию без пробелов):

for i in `ls` do
if [ -f "$i" ] then 
sed '/abc@/d' "$i" | tee "$i"
fi
done

?
при выполнении вылетает с ошибкой — syntax error at line 3: `if' unexpected.
Поясните, пожалуйста, в чем проблема?
Re[3]: обработка текущей директории
От: DOOM Россия  
Дата: 29.05.08 04:12
Оценка:
Здравствуйте, Велимир, Вы писали:

В>Здравствуйте, vnp, Вы писали:


vnp>>Кавычки вокруг 'ls'. Поскольку вы хотите, чтобы ls выполнилось, нужны "бэк-тики", `ls` (которые в левом верхнем углу клавиатуры, под тильдой). Разумеется, надо принять меры против файлов с пробелами в имени ("`ls`"), и директорий.


В>Вы имели ввиду что — то вроде(имена директорий по умолчанию без пробелов):


В>
В>for i in `ls` do
В>if [ -f "$i" ] then 
В>sed '/abc@/d' "$i" | tee "$i"
В>fi
В>done
В>

В>?
В>при выполнении вылетает с ошибкой — syntax error at line 3: `if' unexpected.
В>Поясните, пожалуйста, в чем проблема?

Может ты справку для начала почитаешь прежде, чем спрашивать на форуме? Или хотя бы поищешь пример среди того множества скриптов, что у тебя есть в системе? Почему люди должны отвечать тебе на вопросы связанные банально с синтаксисом bash?
Re: обработка текущей директории
От: Велимир Россия  
Дата: 29.05.08 04:59
Оценка:
всем спасибо, решил проблему.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.