我正在編寫一個Bourne Shell腳本來自動編輯源文件。Bourne Shell:如何在文件的給定行號處插入一些文本行
我得到的行號,我需要這樣的:
line=`sed -n '/#error/=' test.h`
line=$[$line - 2]
現在我想,這個行號後插入文本的幾行,我該怎麼辦呢?
我正在編寫一個Bourne Shell腳本來自動編輯源文件。Bourne Shell:如何在文件的給定行號處插入一些文本行
我得到的行號,我需要這樣的:
line=`sed -n '/#error/=' test.h`
line=$[$line - 2]
現在我想,這個行號後插入文本的幾行,我該怎麼辦呢?
如果有簡單的UNIX編輯器ed
安裝,你可以說這樣的事情:
echo "$line i
$lines
.
w
q
" | ed filename.txt
這是一個沒有 「視覺」 模式VI。 $line
必須是行號和$lines
要插入文件的文本。
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
?
(修正)
你可以只用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
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
它看起來像你工作太辛苦。爲什麼不插入文本而不是找到行號?例如:
$ sed '/#error/a\ > this text is inserted > ' test.h
如果你想插入文本是在文件中,那就更簡單了:
$ sed '/#error/r filename' test.h
無用的使用貓;-) – topskip 2010-04-22 17:43:36