我之前问过一个问题,我需要帮助从.(点)后面的字符串中删除双引号。我得到了一个很好的回答,但是我不确定它到底是如何工作的。
我现在试图从.(点)之前的字符串中删除双引号。我试图通过试验和错误来编辑原始命令,但是我没有太多运气,到目前为止,我最接近的是我在下面留下了。
谁能解释一下第一条命令是如何工作的,为什么会这样,如果可能的话,请帮助我编辑我的尝试,让它从.(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的原创回答。
请您尝试以下的方法(如果您能接受的话 awk
),在GNU中用所示的样本编写和测试。awk
.
awk 'BEGIN{FS=OFS="."} {gsub(/"/,"",$1)} 1' Input_file
解释。 将字段分离器和输出字段分离器制作为 .
在 BEGIN
节。然后在主程序中全局替换为 "
特别是在第一个字段中使用NULL,因为我们已经在第一个字段中使用了 .
作为字段分隔符,而上位机想删除 "
双引号 .
因此在这里只取第1个字段。1
将打印Input_file的当前行。
使用一个基本的循环。
$ sed -e ':L' -e 's/\([^.]*\)"\([^.]*\.\)/\1\2/' -e 'tL' file
A.HELLO
A."HELLO"
A."HELLO"
这适用于所有POSIX兼容的sed,而不仅仅是GNU sed。