首页 > 解决方案 > 从 sed 手工制作匹配示例

问题描述

我找到了一个例子来info sed说明以下内容:

'^\(.*\)\n\1$'
                   This matches a string consisting of two equal substrings separated
                   by a newline.

尝试以这种方式实现它并没有返回任何匹配的行:

echo -e "test\ntest" | sed -n '/^\(.*\)\n\1$/p'
echo -e "test\ntest" | sed -n 's/^\(.*\)\n\1$/\0/p'

我使用的 sed 版本是 4.2.2。

请建议可以测试此示例的方式。

标签: regexbashsed

解决方案


这可能对你有用(GNU sed 和 bash);

<<<$'test\ntest' sed -En 'N;s/^(.*)\n\1$/\1 == \1/p;s/^(.*)\n(.*)$/\1 != \2/p'

将输入的第二行附加到第一行,如果两行相同,则将其替换为,line1 == line2否则将其替换为line1 != line2

注意这两个替换都试图匹配至少一个换行符,如果第一个替换成功,第二个不能。同样,如果第一次替换从未发生过,则第二次替换必须发生。


推荐阅读