删除所有与模式不匹配的字符/字词



我有一个文本,没有行,我想删除所有与模式不匹配的字符:

模式将从单词参数开始,直到找到}}。例如,如果我有此条目:

KHJLMNNamespaceparameter:{{"Hello i am here"}}NamespaceHSKFSAFSLLLJparameter:{{H}}...

我想删除所有内容并将其保留在文件中:parameter:{{"Hello i am here"}} parameter:{{H}}.

我发现的只是删除不包含模式的行,但我找不到与没有/n(行尾)的大文件相关的任何内容。可以使用sed,awk或Vi来做到这一点吗?

谢谢!

$ awk 'BEGIN{RS=ORS="}}"} sub(/.*parameter/,"parameter")' file
parameter:{{"Hello i am here"}}parameter:{{H}}

请注意,由于多字符 RS,这是特定于 gawk 的。

您可以将

grep-P(PCRE)正则表达式一起使用:

grep -oP '.*?Kparameter:{{.*?}}' file
parameter:{{"Hello i am here"}}
parameter:{{H}}

如果perl是一个选项,你可以这样做:

perl -ne "my @wo = ($_ =~ /parameter:{{.*?}}/g); print join(' ',@wo);" your_text_file

在 perl 中,修饰符 *? 是一个非贪婪量词,因此它在第一次遇到}}时停止。

我认为 perl 专家可以在一条指令中做到这一点,而无需临时数组......

编辑:此命令仅在标准输出上输出所需的文本。要更改文件本身,请在调用 perl 时使用开关-i

perl -i.bak -ne "my @wo = ($_ =~ /parameter:{{.*?}}/g); print join(' ',@wo);" your_text_file

将创建一个备份文件,并在末尾附加扩展名.bak并将结果写入与输入文件名同名的文件中。请注意,仅使用 swtich -i无法获取备份文件,但某些平台不允许这样做。有关更多信息,请参阅 doc perlrun。

最新更新