Regex 如何使用perl/awk/sed搜索文件中所有出现的以引号括起来的文本,然后将其删除?

Regex 如何使用perl/awk/sed搜索文件中所有出现的以引号括起来的文本,然后将其删除?,regex,perl,shell,sed,ksh,Regex,Perl,Shell,Sed,Ksh,如何使用perl、awk或sed搜索文件中所有以引号括起来的文本,并打印从文件中删除这些文本的结果?我不想实际更改文件,只想像sed一样打印更改文件的结果 例如,假设该文件包含以下内容: data|more data|"not important"|"more unimportant stuff" 我需要它打印出来: data|more data|| 但我想把文件原封不动地留下。我尝试使用sed,但无法让它接受regexs 我试过这样的方法: sed -e 's/\<["]+[^"]*

如何使用perl、awk或sed搜索文件中所有以引号括起来的文本,并打印从文件中删除这些文本的结果?我不想实际更改文件,只想像sed一样打印更改文件的结果

例如,假设该文件包含以下内容:

data|more data|"not important"|"more unimportant stuff"
我需要它打印出来:

data|more data||
但我想把文件原封不动地留下。我尝试使用sed,但无法让它接受regexs

我试过这样的方法:

sed -e 's/\<["]+[^"]*["]+\>//g' file.txt

sed-e的/\您的
sed
命令中似乎有一些额外的字符

sed -e 's/"[^"]*"//g' file.txt
输入:

"quoted text is here" but not quoted there
never more
"hello world" foo bar
data|more data|"not important"|"more unimportant stuff"
输出:

 but not quoted there
never more
 foo bar
data|more data||

您的
sed
命令中似乎有几个额外的字符

sed -e 's/"[^"]*"//g' file.txt
输入:

"quoted text is here" but not quoted there
never more
"hello world" foo bar
data|more data|"not important"|"more unimportant stuff"
输出:

 but not quoted there
never more
 foo bar
data|more data||
您不需要仅为一个字符声明字符类(括号)


您不需要仅为一个字符声明字符类(括号)…

使用perl单行程序:

perl -pe 's/".*?"//g' file
说明: 开关

  • -p
    :为输入文件中的每一行创建
    while(){…;print}
    循环
  • -e
    :告诉
    perl
    在命令行上执行代码
使用perl一行程序:

perl -pe 's/".*?"//g' file
说明: 开关

  • -p
    :为输入文件中的每一行创建
    while(){…;print}
    循环
  • -e
    :告诉
    perl
    在命令行上执行代码
此代码可能会帮助您


此代码可能会帮助您..

正如Pierre在其回答中所说,您不需要这么多括号。正如Pierre在其回答中所说,您不需要这么多括号。但是,我确实希望它也删除双引号或三引号中的字符串。。我应该提到这一点。那就不是这样做的。考虑下面的例子:“明天我要去上学”…你要删除“我”并从下一个“我可以保证文件中没有单引号”开始再次删除内容。只有多次出现双引号。但我确实希望它也删除双引号或三引号中的字符串。。我应该提到这一点。那就不是这样做的。考虑下面的例子:“明天我要去上学”…你要删除“我”并从下一个“我可以保证文件中没有单引号”开始再次删除内容。只有多次出现双引号。最好解释一下您的解决方案。指定您使用的语言对读者来说也很重要。解释一下您的解决方案可能会很好。指定您使用的语言对读者来说也很重要。