Какую команду unix мы можем использовать для добавления текста к определенной строке в файле? - PullRequest
1 голос
/ 02 марта 2009

Кто-нибудь знает о серии команд Unix, которая позволяет кому-то добавлять текст в конец определенной строки в файле?

например

Строка 1

Строка 2

Строка 3

Строка 4

Я хочу добавить текст «дополнительная информация» в строку 3, чтобы файл теперь выглядел так:

Строка 1

Строка 2

Строка 3, дополнительная информация

Строка 4

Ответы [ 6 ]

8 голосов
/ 02 марта 2009

в awk это:

awk '{s=$0; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile

правильная версия sed:

sed -e '3s/$/, Extra Information/' -i myfile
5 голосов
/ 02 марта 2009

Вот версия с переносным sed (без опции -i):

sed '3s/$/Hello World/' myfile

Обратите внимание, что myfile не изменяется, поэтому вы можете исправить возможные ошибки.

4 голосов
/ 02 марта 2009
awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile

Часть перед фигурными скобками - это условие : если мы находимся в строке 3, мы добавляем некоторый текст. Если фигурные скобки опущены, действие по умолчанию - просто распечатать $0. При необходимости перенаправьте на новый файл или передайте в другую программу. Вы не можете перенаправить на тот же файл, который вы только что читали. Обычный обходной путь - перенаправить в новый файл, а затем переместить в случае успешного выполнения команды:

somecommand > oldfile.tmp && mv oldfile.tmp oldfile
2 голосов
/ 02 марта 2009

Perl:

perl -p -e's{\n}{, extra information\n} if $. ==3' myfile

$. это номер строки

2 голосов
/ 02 марта 2009
sed -e "s/^Line 3/\0, extra info/" -i text.txt
1 голос
/ 02 марта 2009

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