删除第一个点前的子串中的双引号。

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

我之前问过一个问题,我需要帮助从.(点)后面的字符串中删除双引号。我得到了一个很好的回答,但是我不确定它到底是如何工作的。

我现在试图从.(点)之前的字符串中删除双引号。我试图通过试验和错误来编辑原始命令,但是我没有太多运气,到目前为止,我最接近的是我在下面留下了。

谁能解释一下第一条命令是如何工作的,为什么会这样,如果可能的话,请帮助我编辑我的尝试,让它从.(dot)左边的字符串周围删除双引号。

原始命令 - 删除点右边的""。

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 - 删除文件中特定字符串的双引号归功于用户potong的原创回答。

regex awk sed gnu
2个回答
2
投票

请您尝试以下的方法(如果您能接受的话 awk),在GNU中用所示的样本编写和测试。awk.

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

解释。 将字段分离器和输出字段分离器制作为 .BEGIN 节。然后在主程序中全局替换为 " 特别是在第一个字段中使用NULL,因为我们已经在第一个字段中使用了 . 作为字段分隔符,而上位机想删除 " 双引号 . 因此在这里只取第1个字段。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.