Bourne Shell: как вставить несколько строк текста в заданный номер строки файла - PullRequest
0 голосов
/ 22 апреля 2010

Я пишу скрипт Bourne Shell для автоматического редактирования исходного файла.

Я получаю номер нужной мне строки следующим образом:

line=`sed -n '/#error/=' test.h`
line=$[$line - 2]

Теперь я хочу вставить несколькостроки текста после этого номера строки, как я могу это сделать?

Ответы [ 5 ]

0 голосов
/ 23 апреля 2010

Похоже, ты слишком много работаешь. Почему бы просто не вставить текст вместо того, чтобы найти номер строки? например:

$ sed '/#error/a\
> this text is inserted
> ' test.h

Если текст, который вы хотите вставить, находится в файле, это еще проще:

$ sed '/#error/r filename' test.h
0 голосов
/ 23 апреля 2010
line=$(sed -n '/#error/=' test.h)
line=$(($line - 2))
sed -i "$line s/$/\ntext-to-insert/" test.h

или

sed -i "$line r filename" test.h
0 голосов
/ 22 апреля 2010

Если у вас установлен простой редактор Unix ed, вы можете сказать что-то вроде этого:

echo "$line i
$lines
.
w
q
" | ed filename.txt

Это vi без «визуального» режима. $line должен быть номером строки и $lines текстом для вставки в файл.

0 голосов
/ 23 апреля 2010

вы можете просто использовать awk

awk '/#error/{for(i=1;i<=NR-2;i++){print _[i]}print "new\n"_[NR-1];f=1 }!f{_[NR]=$0 }f' file > t && mv t file
0 голосов
/ 22 апреля 2010
totallines=`cat test.h | wc -l`
head -n $line test.h >$$.h
echo "some text" >>$$.h
tail -n $((totallines-line)) test.h >>$$.h
mv $$.h head.h


(Исправлено)

...