Какую команду unix мы можем использовать, чтобы добавить некоторый текст к определенной строке в файле?
Вопрос
Кто-нибудь знает о серии команд unix, которые позволяют кому-либо добавлять некоторый текст в конец определенной строки в файле?
например
Строка 1
Строка 2
Строка 3
Строка 4
Я хочу добавить текст "дополнительная информация" в строку 3, чтобы файл теперь выглядел следующим образом:
Строка 1
Строка 2
Строка 3, дополнительная информация
Строка 4
Решение
Perl:
perl -p -e's{\n}{, extra information\n} if $. ==3' myfile
$.это номер строки
Другие советы
в awk это:
awk '{s=$0; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile
правильная версия sed:
sed -e '3s/$/, Extra Information/' -i myfile
Вот версия с портативным sed
(без опции -i):
sed '3s/$/Hello World/' myfile
Обратите внимание , что myfile
не модифицируется, поэтому вы можете исправить возможные ошибки.
awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile
Часть перед фигурными скобками - это состояние:Если мы находимся в строке 3, мы добавляем некоторый текст.Если фигурные скобки опущены, действие по умолчанию - просто распечатать $0
.Перенаправление на новый файл или канал в другую программу, если это необходимо.Вы не можете перенаправить на тот же файл, который вы только что прочитали.Обычным обходным решением является перенаправление на новый файл, а затем переход к нему, если команда выполнена успешно:
somecommand > oldfile.tmp && mv oldfile.tmp oldfile
sed -e "s/^Line 3/\0, extra info/" -i text.txt
Если вы хотите, чтобы дополнительная информация была добавлена только в одну строку, подойдет любая из однострочных команд sed / awk.
Если вы хотите добавить что-либо (почти) к каждой строке в файле, вам следует создать второй файл с дополнительной информацией для каждой строки и использовать paste
:
$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra
something
something else
$ paste myfile extra
line 1 something
line 2
line 3 something else
line 4