10

特定のパターンの前にファイルの内容を挿入しようとしています

これが私のコードです:

sed -i "" "/pattern/ {
i\\ 
r $scriptPath/adapters/default/permissions.xml"
}" "$manifestFile"

ファイルのコンテンツの代わりにパスを追加します。

何か案は ?

4

5 に答える 5

20

パターンの前にテキストを挿入するには、ファイルを読み込む前にパターン スペースをホールド スペースにスワップする必要があります。例えば:

sed "/pattern/ {
         h
         r $scriptPath/adapters/default/permissions.xml
         g
         N
     }" "$manifestFile"
于 2012-06-28T14:19:38.697 に答える
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
于 2012-06-28T11:02:02.237 に答える
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

挿入.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
于 2012-06-28T11:27:29.907 に答える
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
于 2015-06-11T05:04:28.270 に答える