В особом случае, когда содержимое строк, которые следует удалить, уникально в файле, другой вариант может использовать grep -v
и содержимое строки а не номера строк.Например, если должна быть удалена только одна уникальная строка (удаление одной строки, например, было запрошено в этом дублированном потоке ), или несколько строк, которые все имеют одинаковое уникальное содержание.
Вот пример
grep -v "content of lines to delete" input.txt > input.tmp
Я провел несколько тестов с файлом, который содержит 340 000 строк.
В этом случае метод grep
кажется примерно в 15 раз быстрее, чем метод sed
.
Вот команды и тайминги:
time sed -i "/CDGA_00004.pdbqt.gz.tar/d" /tmp/input.txt
real 0m0.711s
user 0m0.179s
sys 0m0.530s
time perl -ni -e 'print unless /CDGA_00004.pdbqt.gz.tar/' /tmp/input.txt
real 0m0.105s
user 0m0.088s
sys 0m0.016s
time (grep -v CDGA_00004.pdbqt.gz.tar /tmp/input.txt > /tmp/input.tmp; mv /tmp/input.tmp /tmp/input.txt )
real 0m0.046s
user 0m0.014s
sys 0m0.019s
Я пробовал как с параметром LC_ALL = C, так и без него, он не меняет тайминги. Строка поиска (CDGA_00004.pdbqt.gz.tar) находится где-то в середине файла.
Вы можете использовать здесь документ
, но таким способом невозможно предоставить специальный выходной документ.
$ cat | nano <<-EOF
one
two
three
EOF
Received SIGHUP or SIGTERM
Buffer written to nano.save
Такое поведение упоминается на странице руководства под примечаниями
. В некоторых случаях nano пытается сбросить буфер в аварийный файл . Это произойдет в основном, если nano получит SIGHUP или SIGTERM или исчерпает память. Он запишет буфер в файл с именем nano.save, если у буфера еще не было имени, или добавит суффикс «.save» к текущему имени файла. Если аварийный файл с таким именем уже существует в текущем каталоге, он добавит ".save" плюс число (например, ".save.1") к текущему имени файла, чтобы сделать его уникальным. В многобуферном режиме nano запишет все открытые буферы в соответствующие аварийные файлы.
Поэтому я думаю, что nano - не лучший выбор для неинтерактивных текстовых сообщений. Если вы хотите ввести в файл только многострочный текст, вы также можете использовать здесь документ
без nano.
cat > foo.txt <<-EOF
> one
> two
> three
>
> EOF
cme@itp-nb-1-prod-01 ~ $ cat foo.txt
one
two
three
Может быть, это то, что вам нужно.
nano
Напишите свой текст: «Привет, мир»
Нажмите Ctrl + O
(Сохранить файл)
Он запросит имя файла для записи, введите его.
Для выхода нажмите Ctrl + X
nano foo.txt
Нажмите Привет, мир. ^ O ^ X
, где ^
- ctrl
. ^ O
равно Запись
, ^ X
равно Выход
.