LINUX.ORG.RU

$ perl -i -pe 'print "hello, world!\n" if $. == 5' file.txt

здесь 5 — номер строки.

arsi ★★★★★ ()
Ответ на: комментарий от Alan_Steel
#!/bin/sh
# args: file_name, line_number, some_string
head -n $(($2-1)) $1 > /tmp/tmp_crap
echo $3 >> /tmp/tmp_crap
tail -n $2 $1 >> /tmp/tmp_crap
mv /tmp/tmp_crap $1
anonymous ()
Ответ на: комментарий от anonymous

> tail -n $2 $1

плюс перед $2 посеял, этак он выведет N строк с конца, а не с N по конец файла.

А в целом - красиво оформлено ;)

Alan_Steel ★★ ()

Подскажите пожалуйста простую команду, добавляющую в текстовый файл определенную строку перед строкой с номером N.

sed '2iTEST STRING'

добавит TEST STRING перед 2й строкой.

drBatty ★★ ()
Ответ на: комментарий от anonymous

>Открываешь OpenOffice и правишь что нужно. Ваш К.О.

это не КО, а ламо.

use vim:

:666<ENTER>

O

добавит строчку перед 666й строкой. Но sed кошернее.

drBatty ★★ ()
LINE=10
STR="New string before line $LINE"

awk -v l=$LINE s="$STR" 'NR == l {print s}; {print}' input.txt > output.txt

cat output.txt > input.txt
rm output.txt
sdio ★★★★★ ()
Ответ на: комментарий от Pterodaktil

[code]sed -i[/code] или лучше без убийства старого [code]sed -i*.bak[/code]

В условии не написано где лежит текст, и куда его надо загнать...

drBatty ★★ ()
Ответ на: комментарий от Pterodaktil

stormy показал простое и элегантное решение

/dev/stdout и /dev/stdin это тоже файлы. причём текстовые. я думал, что вы сами догадаетесь, как читать/писать файлы. и нет в решении stormy ничего элегантного - sed-скрипт вообще рваный, и непонятно, что и к чему относится. Кстати, наши решения с командой i ещё и не переносимы, надо писать так:

#!/bin/sed -f

2i\
Тестовая строчка

Вот ещё такой вариант. Для гуру:

sed -r 'N;N;N;N;N;N;s/(.*)(\n.*)/\1тестовая строка\n\2/'
Номер строки определяется числом команд N

drBatty ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.