Regex 从第一个点前面的子字符串中删除双引号
我之前问过一个问题,在这个问题中,我需要帮助从字符串中删除双引号。(点)。我欣然收到了答复,但我不确定它到底是如何工作的 我现在正试图删除字符串前面的双引号。(点)。我曾尝试通过反复试验来编辑原始命令,但是我没有太多的运气,下面是迄今为止我所做的最接近的一次 有人能解释一下第一个命令是如何工作的以及为什么工作的吗?如果可能的话,可以帮助我编辑我的尝试,允许它删除文本左侧字符串周围的双引号。(点) 原始命令-从点的右侧删除“”:Regex 从第一个点前面的子字符串中删除双引号,regex,awk,sed,gnu,Regex,Awk,Sed,Gnu,我之前问过一个问题,在这个问题中,我需要帮助从字符串中删除双引号。(点)。我欣然收到了答复,但我不确定它到底是如何工作的 我现在正试图删除字符串前面的双引号。(点)。我曾尝试通过反复试验来编辑原始命令,但是我没有太多的运气,下面是迄今为止我所做的最接近的一次 有人能解释一下第一个命令是如何工作的以及为什么工作的吗?如果可能的话,可以帮助我编辑我的尝试,允许它删除文本左侧字符串周围的双引号。(点) 原始命令-从点的右侧删除“”: sed 's/\."\([^"]*\)"/.\1/g' file
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"
链接至原始帖子:
原始答案归功于用户potong。请尝试以下内容(如果您对
awk
没有问题),使用GNUawk
中显示的样本编写和测试
awk 'BEGIN{FS=OFS="."} {gsub(/"/,"",$1)} 1' Input_file
说明:在
开始
部分将字段分隔符和输出字段分隔符设置为
。然后在主程序中,在第一个字段中用NULL全局替换“
,因为我们已经将
作为字段分隔符,OP希望删除”
前面的双引号,所以取第一个字段就可以了<代码>1将打印输入文件的当前行。使用基本循环:
$ sed -e ':L' -e 's/\([^.]*\)"\([^.]*\.\)/\1\2/' -e 'tL' file
A.HELLO
A."HELLO"
A."HELLO"
这适用于所有符合POSIX标准的sed,而不仅仅是GNU使用的sed。我从未对awk感到满意,因为它看起来总是很吓人!但这是一个非常清楚的解释,谢谢。我已经测试过了,它是有效的。您还建议在sed上使用awk吗?@walkerja,IMHO专家(@Ed morton)他们总是建议
awk
而不是sed
(在复杂且更涉及逻辑的任务上)由于awk
比sed
有更多的功能,使得我们的生活更容易在awk
中实现,因此,在这个伟大的网站上加油,快乐学习。