改行なしで行に文字を追加するためにsedを使用する方法は?

改行なしで行に文字を追加するためにsedを使用する方法は?

次のテキストがあります。

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = 28.180958

"次のように二重引用符()を追加したいと思います28.180958

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = "28.180958"

sed -i 4s/=\ /=\ \"/ ...数字の前に二重引用符を挿入すると正常に使用できますが、二重引用符を追加するのは困難です。 sedを使用してAUXDATA行に二重引用符を追加するさまざまな方法を試しましたが、二重引用符は実際の行の終わりではなくAUXDATA行の下に表示されます。たとえば、sed 4a'"' data.txt次のようにします。

Variables = X, Y, Z
Zone T="Run 0020 Probe Points", I=19, J=1, F=POINT
DT=(double double double)
AUXDATA Zone_1_X = 28.180958
"

私が試したことはすべて"AUXDATA行の上または下に二重引用符()を入れます。 AUXDATA行自体の末尾に二重引用符をどのように取得しますか?

答え1

ヒントは、行の最後のスペースで区切られたトークンなど、行の末尾にある項目を一致させ、そのトークンの周囲に二重引用符を使用して行を再構築することです。

このコマンドは次のことを行います。

sed -E 's/^(AUXDATA.*) ([^ ]*)$/\1 "\2"/' < foo

この-Eオプションは、sedに拡張正規表現構文を使用することを伝えます。

正規表現自体は行を2つの部分に分割します。

  • AUXDATA行の先頭(^行の先頭を表す)とその後にスペースで終わるテキスト

  • スペースを含まずに行末で終わる行部分

具体的には、最初のブロックが一致し、AUXDATA Zone_1_X =2番目のブロックが一致します28.180958sed次に、その行を次に置き換えます。

  • 最初の部分の\1後にスペースが続きます。
  • 二重引用符、2番目の部分、\2および別の二重引用符。

入力ファイルの他のすべての行は変更されていませんsed

関連情報