我之前曾问过一个问题,在该问题中,需要我提供帮助以删除字符串后的双引号。 (点)。我收到了一个答复,但是不确定它的工作原理。
我现在正尝试从之前的字符串中删除双引号。 (点)。我尝试了反复尝试来编辑原始命令,但是运气不高,到目前为止我走的最近。
有人可以解释一下第一个命令的工作方式和原因,如果可能的话,请帮助我进行编辑,以使它删除左侧字符串附近的双引号。 (点)。
原始命令-从点的右侧删除“”:
sed 's/\."\([^"]*\)"/.\1/g' file
之前的样品:
"A".HELLO
A."HELLO"
"A"."HELLO"
必填结果:
A.HELLO
A."HELLO"
A."HELLO"
尝试:
sed -i 's/"*"\.\([^"]*\)"/.\1/g' $(2)
之后:
"A".HELLO
A."HELLO"
"A.HELLO"
链接到原始帖子:UNIX Bash - Removing double quotes from specific strings within a file 归功于用户potong的原始答案。
答案 0 :(得分:2)
请您尝试以下操作(如果您对awk
满意),并使用GNU awk
中显示的示例进行编写和测试。
awk 'BEGIN{FS=OFS="."} {gsub(/"/,"",$1)} 1' Input_file
说明: :在.
部分中将字段分隔符和输出字段分隔符设为BEGIN
。然后,在主程序中,全局地将"
专门替换为第一字段中的NULL,因为我们已经将.
用作字段分隔符,并且OP想要删除"
前的.
双引号在这里获得第一名将达到目的。 1
将显示Input_file的当前行。
答案 1 :(得分:1)
使用原始循环:
$ sed -e ':L' -e 's/\([^.]*\)"\([^.]*\.\)/\1\2/' -e 'tL' file
A.HELLO
A."HELLO"
A."HELLO"
这适用于所有POSIX兼容的sed,不仅适用于GNU sed。