从第一个点之前的子字符串中删除双引号

时间:2020-06-11 14:36:44

标签: regex awk sed gnu

我之前曾问过一个问题,在该问题中,需要我提供帮助以删除字符串后的双引号。 (点)。我收到了一个答复,但是不确定它的工作原理。

我现在正尝试从之前的字符串中删除双引号。 (点)。我尝试了反复尝试来编辑原始命令,但是运气不高,到目前为止我走的最近。

有人可以解释一下第一个命令的工作方式和原因,如果可能的话,请帮助我进行编辑,以使它删除左侧字符串附近的双引号。 (点)。

原始命令-从点的右侧删除“”:

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的原始答案。

2 个答案:

答案 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。