#file #unix #sed #sh
#файл #unix #sed #sh
Вопрос:
Как удалить все строки в файле, которые начинаются со «string» в sh? Я думал об использовании команды sed.
Ответ №1:
grep -v '^string' yourfile.txt > stripped.txt
Комментарии:
1. как насчет из того же файла?
2. На самом деле это невозможно сделать с помощью grep. но тогда вы могли бы выводить во временный файл
mv tempfile origfile
. Если вы хотите истинное редактирование на месте, то необходимо использовать sed / perl / awk.3. как бы я тогда их использовал? 😀
4. ptankov.wordpress.com/2008/04/09/…
5. не сработало, только перепечатал строки, ЗА исключением строк, содержащих строку
Ответ №2:
Чтобы сделать это на месте, если ваш sed поддерживает опцию -i, вы можете сделать:
sed -i '/^string/d' входной файл
Комментарии:
1. sed ожидает расширение файла для резервного копирования при использовании
-i
, в OS X вы должны быть очень педантичными, поэтому явно используйте одинарные кавычки:sed -i '' '/^string/d' input-file
2. В OSX по умолчанию
sed
даже не поддерживается-i
! Мое личное предпочтение — никогда не использовать-i
и вместо этого выполнять перенаправления с помощью командной строки.3. Не
-e
требуется?4. Это не работает в ksh? Если текст содержит строку как ‘string-d’, то? не работает
Ответ №3:
sed и grep в ваших ответах не хватает их друга awk:
awk '!/^string/' inputfile > resultfile
Комментарии:
1. Мне нужно, чтобы это было в том же файле
Ответ №4:
Вы можете использовать Vim в режиме Ex:
ex -sc g/^string/d -cx file
-
g
выберите все совпадающие строки -
d
Удалить -
x
сохраните и закройте