以下将打印出" 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
如何避免打印出不匹配的字符串?
答案 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|'
无输出