Здравствуйте.
Скрипт должен удалить из каждого файла текущей директории все строчки с вхождением "abc@".
Если я правильно понял, то её необходимо обработать следующей командой:
sed '/abc@/d' "$i" | tee "$i"
где i — имя файла из текущей директории.
Подскажите пожалуйста, как можно получить весь список файлов данной директории?
что не правильно в:
for i in 'ls' do
sed '/abc@/d' "$i" | tee "$i"
done
?
Здравствуйте, Велимир, Вы писали:
В>Подскажите пожалуйста, как можно получить весь список файлов данной директории?
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, но я не знаю как там строчку удалить (но точно можно).
Здравствуйте, Велимир, Вы писали:
В>Здравствуйте.
В>Скрипт должен удалить из каждого файла текущей директории все строчки с вхождением "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
Здравствуйте, 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.
Поясните, пожалуйста, в чем проблема?
Здравствуйте, Велимир, Вы писали:
В>Здравствуйте, 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?