У меня есть сотни текстовых файлов в одном каталоге. Для всех файлов я хочу удалить все строки, начинающиеся с HETATM. Мне нужен код csh или bash.
Я бы подумал, что вы будете использовать grep, но я не уверен.
У меня есть сотни текстовых файлов в одном каталоге. Для всех файлов я хочу удалить все строки, начинающиеся с HETATM. Мне нужен код csh или bash.
Я бы подумал, что вы будете использовать grep, но я не уверен.
Используйте 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
) и перезаписывает исходный файл только в случае успешного выполнения команды.
Используя опцию -v
для grep
, чтобы получить все строки, которые не совпадают:
grep -v '^HETATM' input.txt > output.txt