特定のパターンの前にファイルの内容を挿入しようとしています
これが私のコードです:
sed -i "" "/pattern/ {
i\\
r $scriptPath/adapters/default/permissions.xml"
}" "$manifestFile"
ファイルのコンテンツの代わりにパスを追加します。
何か案は ?
パターンの前にテキストを挿入するには、ファイルを読み込む前にパターン スペースをホールド スペースにスワップする必要があります。例えば:
sed "/pattern/ {
h
r $scriptPath/adapters/default/permissions.xml
g
N
}" "$manifestFile"
削除するだけ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
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
パターンが最後の行にある場合、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