私はsedを使ってファイルのパターンの上にいくつかの行を挿入しています。ファイルの例
Stuff
Pattern
Stuff
これは、ファイルを分割してテキストを挿入する前に使用するコードです。Pattern
patternline=$(grep -n "Pattern" "/my/file" | cut -f1 -d:)
firstcut=$(($patternline -1))
firstpart=$(sed -n 1,"$firstcut"p "/my/file")
secondpart=$(sed -n ''"$abspathcomment"',$p' "/my/file")
# Indentation intentional as snippet is nested within an IF statement
text=$(cat <<EOF
Text I want to insert with one leading and two trailing new lines
EOF
)
echo "$firstpart$text$secondpart" > "/my/file"
sedを使ってファイルを分割し、途中で目的のテキストを挿入し、最後にcatを使用してその内容を同じファイルに出力します。
私はファイルの次の出力を得ることを期待しています。
Stuff
Text I want to insert with one leading and two trailing new lines
Pattern
Stuff
しかし、代わりに私は得る
Stuff
Text I want to insert with one leading and two trailing new linesPattern
Stuff
sed または bash が改行文字を削除するかどうかはわかりません。 Bashでファイルに結果を反映するときに結果を保存する方法は?
ベストアンサー1
コマンド置換は末尾の改行を使用します。
a=$( printf 'hello\nworld\n\n\n\n\n\n' )
printf 'a is "%s"\n' "$a"
出力:
a is "hello
world"
sed
元の問題を解決するために使用します。
sed '/Pattern/i\
Text I want to insert with one leading and two trailing new lines\
\
' file
またはGNUを使用してくださいsed
。
sed '/Pattern/i Text I want to insert with one leading and two trailing new lines\n\n' file
ここでは、i
(「挿入」)コマンドを使用して、一致sed
する行の前に特定の行セットを挿入しますPattern
。最初のバリエーションでは、2つの改行文字をエスケープしてsed
テキストに挿入できます。結果の先行改行文字は、Pattern
最初の改行文字と同じです。
たとえば、これが生成するデータ
Stuff
Text I want to insert with one leading and two trailing new lines
Pattern
Stuff
これの利点は、既存のスペースが変更されないことです。