2012-06-28 10 views

答えて

20

の前にのパターンを挿入するには、ファイルを読み込む前にパターンスペースをホールドスペースに入れ替える必要があります。例:パターンは、最後の行にある場合

sed "/pattern/ { 
     h 
     r $scriptPath/adapters/default/permissions.xml 
     g 
     N 
    }" "$manifestFile" 
+0

スクリプトを二重引用符で囲む必要があります。そうしないと、$ scriptPathは展開されません。最後にNが必要な理由を説明してください。 – hipe

+0

@hipe rコマンドは、出力ストリームに挿入するために読み込みをキューに入れるだけです。サイクルが終了するまで、または次の行が読み取られるまで、実際には何も読み取られません。 Nを指定しないと、ファイルはパターンスペースが印刷されるまで挿入されず、挿入ではなく追加として機能します。非常に直感的ではありません。 –

+0

大変ありがとうございました – ridan

4

i\\を削除してください。

例:

$ cat 1.txt 
abc 
pattern 
def 

$ echo hello > 2.txt 

$ sed -i '/pattern/r 2.txt' 1.txt 

$ cat 1.txt 
abc 
pattern 
hello 
def 
+3

パターンの後に挿入します。どのようにコンテンツを挿入するのですか? – ridan

1

私はawkを使用して、このような何かを得ました。醜いが、私のテストでトリックをした:

コマンド:

cat test.txt | awk ' 
/pattern/ { 
    line = $0; 
    while ((getline < "insert.txt") > 0) {print}; 
    print line; 
    next 
} 
{print}' 

あるtest.txt:

$ cat test.txt 
some stuff 
pattern 
some other stuff 

insert.txt:

$ cat insert.txt 
this is inserted file 
this is inserted file 

出力:

some stuff 
this is inserted file 
this is inserted file 
pattern 
some other stuff 
0

CodeGnomeのソリューションは、動作しません。.. だから私は3つのコマンドを使用していました。

sed -i '/pattern/ i\ 
     INSERTION_MARKER 
     ' $manifestFile 
sed -i '/INSERTION_MARKER/r $scriptPath/adapters/default/permissions.xml' $manifestFile 
sed -i 's/INSERTION_MARKER//' $manifestFile 
関連する問題