我有以下文字:
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 我们将使用扩展的正则表达式语法。
正则表达式本身将该行分成两部分:
AUXDATA
行首的部分(^
表示行首),后跟以空格结尾的任意文本行中不包含空格并在行尾结束的部分
具体来说,在这种情况下,第一块匹配AUXDATA Zone_1_X =
,第二块匹配28.180958
。 sed
然后将该行替换为:
- 第一部分,
\1
后跟一个空格 - 双引号,然后是第二部分
\2
和另一个双引号。
输入文件的所有其他行均不经更改地通过sed
。