Удаление строк из нескольких текстовых файлов, начинающихся с определенного слова

#bash #shell #terminal #grep #csh

#bash #оболочка #терминал #grep #csh

Вопрос:

У меня сотни текстовых файлов в одном каталоге. Для всех файлов я хочу удалить все строки, начинающиеся с HETATM . Мне понадобится код csh или bash.

Я бы подумал, что вы будете использовать grep, но я не уверен.

Ответ №1:

Используйте sed так:

 sed -i -e '/^HETATM/d' *.txt
  

для обработки всех файлов на месте.

-i означает «на месте».

-e означает выполнение следующей команды.

/^HETATM/ означает «найти строки, начинающиеся с HETATM», а следующее d означает «удалить».

Сначала сделайте резервную копию!

Если вы действительно хотите сделать это с grep помощью, вы могли бы сделать это:

 #!/bin/bash

for f in *.txt
do
   grep -v "^HETATM" "%f" > $$.tmp amp;amp; mv $$.tmp "$f"
done
  

Он создает временный файл выходных данных grep (в файле $$.tmp ) и перезаписывает ваш исходный файл только в том случае, если команда выполняется успешно.

Ответ №2:

Используя -v опцию grep , чтобы получить все строки, которые не совпадают:

 grep -v '^HETATM' input.txt > output.txt