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

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

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


person Josh    schedule 23.06.2014    source источник


Ответы (2)


Используйте 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 && mv $$.tmp "$f"
done

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

person Mark Setchell    schedule 23.06.2014

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

grep -v '^HETATM' input.txt > output.txt
person julienc    schedule 23.06.2014