Как удалить все строки, начинающиеся со «string» в unix sh?

#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
  
  1. g выберите все совпадающие строки

  2. d Удалить

  3. x сохраните и закройте