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

Regex 删除与模式不匹配的所有字符/单词,regex,awk,sed,vi,Regex,Awk,Sed,Vi,我有一个文本,没有行,我想删除所有与模式不匹配的字符: 模式将从word参数开始,直到找到}}。例如,如果我有此条目: KHJLMNNamespaceparameter:{{"Hello i am here"}}NamespaceHSKFSAFSLLLJparameter:{{H}}... 我想删除所有内容并将其保留在文件中:参数:{{{你好,我在这里}}参数:{{H} 我所发现的只是删除了一行不包含模式的代码,但是如果没有/nend行,我无法找到任何与大型文件相关的内容。可以使用sed、aw

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

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

KHJLMNNamespaceparameter:{{"Hello i am here"}}NamespaceHSKFSAFSLLLJparameter:{{H}}...
我想删除所有内容并将其保留在文件中:参数:{{{你好,我在这里}}参数:{{H}

我所发现的只是删除了一行不包含模式的代码,但是如果没有/nend行,我无法找到任何与大型文件相关的内容。可以使用sed、awk或Vi来实现吗

谢谢

如果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无法获取备份文件,但某些平台不允许这样做。有关更多信息,请参阅。

如果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无法获取备份文件,但某些平台不允许这样做。有关更多信息,请参阅。

您可以将此grep与-p PCRE regex一起使用:

grep -oP '.*?\Kparameter:\{\{.*?\}\}' file
parameter:{{"Hello i am here"}}
parameter:{{H}}
您可以将此grep与-p PCRE regex一起使用:

grep -oP '.*?\Kparameter:\{\{.*?\}\}' file
parameter:{{"Hello i am here"}}
parameter:{{H}}
注意,由于多字符RS,这是特定于gawk的


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

我刚刚测试过,但它不起作用。。。无论如何谢谢你!适合我,输出和你想要的一样。你能更准确地说明错误/失败吗?您使用的是哪个版本的perl?我的是5.20.1它只是不打印任何输出。我所做的就是在macOSX上的终端中执行您的命令,perl-ne my@wo=$\=~/参数:\{\{.*.\}\}/g;打印加入“”,@wo;output.txt,但它不打印任何内容。。。我的perl版本是5.16。0@iOSAddicted仅仅说它不起作用距离有用的反馈还有很长很长的路要走,我们没有机会试图帮助您找出问题所在。如果您需要帮助,请投入一点精力帮助我们帮助您。使用-i.bak创建并输出与我的output.txt文件输入完全相同的output.txt.bak。抱歉之前没有提供更多细节…我刚刚测试过,但它不工作。。。无论如何谢谢你!适合我,输出和你想要的一样。你能更准确地说明错误/失败吗?您使用的是哪个版本的perl?我的是5.20.1它只是不打印任何输出。我所做的就是在macOSX上的终端中执行您的命令,perl-ne my@wo=$\=~/参数:\{\{.*.\}\}/g;打印加入“”,@wo;output.txt,但它不打印任何内容。。。我的perl版本是5.16。0@iOSAddicted仅仅说它不起作用距离有用的反馈还有很长很长的路要走,我们没有机会试图帮助您找出问题所在。如果您需要帮助,请投入一点精力帮助我们帮助您。使用-i.bak创建并输出与我的output.txt文件输入完全相同的output.txt.bak。很抱歉在…之前没有提供更多详细信息。。。