删除点前后的字符串中的双引号

问题描述 投票:1回答:2

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

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

[有人可以解释第一个命令的工作原理和原因,如果可能的话,请帮助我编辑我的尝试,以使它可以删除。左边字符串中的双引号。 (点)。谢谢!

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

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

regex sed gnu
2个回答
1
投票

[请您尝试以下操作(如果您对awk没问题),请使用GNU awk中显示的示例进行编写和测试。

awk 'BEGIN{FS=OFS="."} {gsub(/"/,"",$1)} 1' Input_file

说明:.部分中将字段分隔符和输出字段分隔符设为BEGIN。然后在主程序中全局地在第一个字段中专门用NULL替换",因为我们已经将.用作字段分隔符,并且OP只想删除"之前的.双引号,因此采用第一个字段就可以了。 1将打印Input_file的当前行。


1
投票

使用原始循环:

$ sed -e ':L' -e 's/\([^.]*\)"\([^.]*\.\)/\1\2/' -e 'tL' file
A.HELLO
A."HELLO"
A."HELLO"

这适用于所有POSIX兼容的sed,不仅适用于GNU sed。

© www.soinside.com 2019 - 2024. All rights reserved.