Как ввести текст в новый текстовый файл с помощью nano из командной строки?

В особом случае, когда содержимое строк, которые следует удалить, уникально в файле, другой вариант может использовать 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) находится где-то в середине файла.

1
12.01.2017, 20:25
3 ответа

Вы можете использовать здесь документ , но таким способом невозможно предоставить специальный выходной документ.

$ 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

Может быть, это то, что вам нужно.

1
27.01.2020, 23:46
  1. Откройте nano:

nano

  1. Напишите свой текст: «Привет, мир»

  2. Нажмите Ctrl + O (Сохранить файл)

  3. Он запросит имя файла для записи, введите его.

  4. Для выхода нажмите Ctrl + X

0
27.01.2020, 23:46
nano foo.txt

Нажмите Привет, мир. ^ O ^ X , где ^ - ctrl . ^ O равно Запись , ^ X равно Выход .

0
27.01.2020, 23:46

Теги

Похожие вопросы