次のテキストがあります。
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.180958
。 sed
次に、その行を次に置き換えます。
- 最初の部分の
\1
後にスペースが続きます。 - 二重引用符、2番目の部分、
\2
および別の二重引用符。
入力ファイルの他のすべての行は変更されていませんsed
。