我以前问过一个问题,在这个问题中,我需要帮助来删除字符串后的双引号。 (点)。我收到了一个答复,但是我不确定它的工作原理。
我现在正在尝试从之前的字符串中删除双引号。 (点)。我已经尝试通过反复试验来编辑原始命令,但是我运气不高,到目前为止我已经走到最底下了。
[有人可以解释第一个命令的工作原理和原因,如果可能的话,请帮助我编辑我的尝试,以使它可以删除。左边字符串中的双引号。 (点)。谢谢!
原始命令-从点的右侧删除“”:
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提供原始答案。
[请您尝试以下操作(如果您对awk
没问题),请使用GNU awk
中显示的示例进行编写和测试。
awk 'BEGIN{FS=OFS="."} {gsub(/"/,"",$1)} 1' Input_file
说明:在.
部分中将字段分隔符和输出字段分隔符设为BEGIN
。然后在主程序中全局地在第一个字段中专门用NULL替换"
,因为我们已经将.
用作字段分隔符,并且OP只想删除"
之前的.
双引号,因此采用第一个字段就可以了。 1
将打印Input_file的当前行。
使用原始循环:
$ sed -e ':L' -e 's/\([^.]*\)"\([^.]*\.\)/\1\2/' -e 'tL' file
A.HELLO
A."HELLO"
A."HELLO"
这适用于所有POSIX兼容的sed,不仅适用于GNU sed。