В файле с большим количеством строк я хочу удалить строки, которые начинаются с HERE IT IS
.
Как я могу сделать это, используя только инструменты командной строки?
command-line
text-processing
micgeronimo
источник
источник
vim
вот такvim '+g/^HERE IT IS/d' +wq test.txt
Ответы:
Попробуй
sed
:ВНИМАНИЕ: лучше сделать резервную копию при использовании
-i
переключателяsed
:Исходный файл останется таким же, как
<file>.bak
и измененный файл<file>
.источник
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>
sed '/^HERE IT IS/G' file
.В дополнение к очень хорошим
grep
иsed
полученным ответам, вот некоторые другие инструменты, которые могут сделать то же самое:Несколько способов Perl:
Вы можете добавить
-i
переключатель в любой из примеров для редактирования файла на месте:(Г) AWK
Более новые версии (4.1.1 и позже) GNU
awk
(по умолчаниюawk
в Linux) также могут редактировать файл на месте:Shell (
bash
,zsh
,ksh
, вероятно , другие). Это немного глупо, но это можно сделать, но другие инструменты лучше.источник
bash
тот сделал меняprintf "%s\n" "$line"
: заключать в кавычки $ line для сохранения пробелов и избегать некоторых проблем с эхом (интерпретация специальных символов и т. д.). и избегает необходимости добавлять--
тоже.IFS=
и-r
я могу также пройти весь путь и сделать его надежным.Я бы использовал,
grep
чтобы отфильтровать их. Например :Затем переместите выход обратно в путь.
источник
sed
это определенно путь.Эта небольшая модификация команды @heemayl дала вам удаление строки, независимо от того, используется ли тот же случай в шаблоне или нет, из-за I в ссылке на шаблон.
Если у вас есть несколько файлов в каталоге, для которого вы хотите сделать это, вы можете объединить это с find как так.
Опция maxdepth означает, что это не будет повторяться в каталогах.
источник
Другой вариант с питоном:
Где f - путь к файлу между кавычками.
источник
Grep
(?!HERE IT IS)
отрицательное утверждение, которое заставляет механизм регулярных выражений соответствовать всей начальной границе строки ( которая обычно соответствует^
), только если за ней не следует строкаHERE IT IS
питон
Сохраните скрипт в файле, скажем,
script.py
а затем запустите его с помощью приведенной ниже команды на терминале.источник
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)]
но это не намного эффективнее, чемstartswith
. Я задавался вопросом, как[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
не будет производить вывод в списке.Вы можете использовать Vim в режиме Ex:
g
глобальный поискd
удалятьx
сохранить и закрытьисточник