Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从第一个点前面的子字符串中删除双引号_Regex_Awk_Sed_Gnu - Fatal编程技术网

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
没有问题),使用GNU
awk
中显示的样本编写和测试

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
中实现,因此,在这个伟大的网站上加油,快乐学习。