如何避免perl -pe打印出无与伦比的线条

时间:2015-05-05 23:27:20

标签: regex perl

以下将打印出" chicken",这是预期的:

echo "I like chicken" | perl -pe 's|.*(chicken).*|\1|'

Output: chicken

但是,以下内容将打印出来"我喜欢培根"即使"鸡肉"没有匹配:

echo "I like bacon" | perl -pe 's|.*(chicken).*|\1|'

Output: I like bacon

如何避免打印出不匹配的字符串?

1 个答案:

答案 0 :(得分:3)

s///代替,我认为这不是你想做的。 s|.*(chicken).*|\1|告诉perl在其中找到一条带有'chicken'的行,并将'chicken'替换为自己。

而是使用m//进行正则表达式匹配,并使用-ne代替-pe

echo "I like chicken" | perl -ne 'print if m|chicken|'

输出:I like chicken

echo "I like bacon" | perl -ne 'print if m|chicken|'

无输出

相关问题