を挿入するようにsedを使用すると、私のコードです:私は与えられたパターンここ</p> <p>前にファイルの内容を挿入しようとしているファイルの内容
sed -i "" "/pattern/ {
i\\
r $scriptPath/adapters/default/permissions.xml"
}" "$manifestFile"
ではなく、ファイルの内容のパスを追加します。
アイデア?
を挿入するようにsedを使用すると、私のコードです:私は与えられたパターンここ</p> <p>前にファイルの内容を挿入しようとしているファイルの内容
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
パターンの後に挿入します。どのようにコンテンツを挿入するのですか? – ridan
私は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
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
スクリプトを二重引用符で囲む必要があります。そうしないと、$ scriptPathは展開されません。最後にNが必要な理由を説明してください。 – hipe
@hipe rコマンドは、出力ストリームに挿入するために読み込みをキューに入れるだけです。サイクルが終了するまで、または次の行が読み取られるまで、実際には何も読み取られません。 Nを指定しないと、ファイルはパターンスペースが印刷されるまで挿入されず、挿入ではなく追加として機能します。非常に直感的ではありません。 –
大変ありがとうございました – ridan