在两个参数之间删除数据,但不包括PERL中的参数
我想删除两个参数之间的任何数据,不含参数只是第一次出现在两个参数之间删除数据,但不包括PERL中的参数
目前其删除,包括参数。
猫input.txt中
) delete;
Test
Test
)delete;
perl -0777 -pe 's/\Q)\E.*?\Q;\E//' input.txt
电流输出:
Test
Test
)delete;
预期输出:
) ;
Test
Test
)delete;
如何排除参数? 有什么帮助吗?
在awk中的任何新的解决方案也表示赞赏。
只要指定作为替换的内容:
perl -0777 -pe 's/\Q)\E.*?\Q;\E/);/'
's/\).*?;/);/'
可能是更具可读性。
您还可以使用查找变通:
's/(?<=\)).*?(?=;)//'
即前面是)
,其次是;
,但它们不属于匹配的子字符串。
感谢它工作正常。 –
's /(? ikegami
如果你只想删除第一个出现的字符串)和; (通过查看您的预期输出),那么以下内容可能会对您有所帮助。
awk '!n{n=sub(/^\).*\;/,") ;")} 1' Input_file
输出将是如下。
) ;
Test
Test
)delete;
说明:所以这里检查,如果变量名为N的值是NULL,它会为).*;
由单一的替代之前为空。所以一旦它通过了这个条件,它就会使用awk的子关键字来代替所有的)。与);
并保存它的响应,现在作为1替代已经被做出,因此下一次这个条件(!n)永远不会是真的,因此它将仅替代第一次出现的).*;
。 1意味着它将打印Input_file的行。
任何人都可以让我知道投票的理由吗? – RavinderSingh13
现在做了,实际上因为没有使用代码标签,所以不清楚是否需要空间,所以我没有把它放在那里,请让我知道如果你现在就可以移除它。 – RavinderSingh13
使用GNU awk
$ cat infile
) delete;
Test
Test
)delete;
$ awk '!f{print f=gensub(/(\)).*(;)/,"\\1 \\2","a");next}1' infile
) ;
Test
Test
)delete;
awk '{sub(/. delete./,") ;")}1' file
) ;
Test
Test
)delete;
不应该期望的输出必须在最后删除单词'delete'?因为你说的排除第一次出现 – Inian
提示:'\)'比'\ Q)\ E'清晰得多。如果它仍然不够清楚,请使用'/ x'并将空格添加到您的模式。 – ikegami