在逗号分隔的模式地址中,如果 sed 匹配两个模式,它将对匹配的行和中间的行执行相关命令。因此:
sed -n '/pattern1/,/pattern2/p' < foo
将打印 pattern1
和 pattern2
之间的所有行以及匹配行本身。
如果 pattern1
不匹配,命令将不会执行,即不会打印任何内容。
但是,如果 pattern2
不匹配,命令将执行(将打印行)直到文件末尾!
当 pattern2
不匹配时是否也可以避免执行?
最佳答案
是的,但是由于在看到整个模式之前您无法决定是否打印,因此您必须缓冲输入:
sed -n '/pattern1,/pattern2/{H;/pattern2/{g;s/.//p}}'
关于regex - 当第二个模式不匹配时,以逗号分隔的模式地址执行 sed 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181392/