0

ソースファイルを自動的に編集するBourneシェルスクリプトを書いています。

必要な行番号を次のように取得します。

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

この行番号の後に数行のテキストを挿入したいのですが、どうすればよいですか?

4

5 に答える 5

0
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


(修正)

于 2010-04-22T17:01:38.200 に答える
0

単純なUNIXエディタedがインストールされている場合は、次のように言うことができます。

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

これは「ビジュアル」モードのないviです。ファイルに挿入する$line行番号とテキストである必要があります。$lines

于 2010-04-22T17:30:23.127 に答える
0

あなたはただ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
于 2010-04-22T23:42:02.050 に答える
0
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
于 2010-04-23T00:00:29.310 に答える
0

頑張っているようです。行番号を見つける代わりに、テキストを挿入してみませんか?例えば:

$ sed'/#error / a \
>このテキストが挿入されます
>'test.h

挿入するテキストがファイルにある場合は、さらに簡単です。

$ sed'/#error / r filename' test.h
于 2010-04-23T09:41:40.260 に答える