regex - 当第二个模式不匹配时,以逗号分隔的模式地址执行 sed 命令

标签 regex bash sed git-bash

在逗号分隔的模式地址中,如果 sed 匹配两个模式,它将对匹配的行和中间的行执行相关命令。因此:

sed -n '/pattern1/,/pattern2/p'  < foo

将打印 pattern1pattern2 之间的所有行以及匹配行本身。

如果 pattern1 不匹配,命令将不会执行,即不会打印任何内容。
但是,如果 pattern2 不匹配,命令将执行(将打印行)直到文件末尾!

pattern2 不匹配时是否也可以避免执行?

最佳答案

是的,但是由于在看到整个模式之前您无法决定是否打印,因此您必须缓冲输入:

sed -n '/pattern1,/pattern2/{H;/pattern2/{g;s/.//p}}'

关于regex - 当第二个模式不匹配时,以逗号分隔的模式地址执行 sed 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181392/

相关文章:

sql - 在列中查找所有但允许的字符

python - 有关如何将正则表达式转换为状态机图的任何指针

arrays - printf '%s\n' "${array[@]}"每个数组元素打印一行是否正常?

linux - 使用 bash 脚本根据给定条件使用 sed 提取位置特定记录

awk - 如何从多个文件中删除模式

javascript - 匹配最多 9 位整数的正则表达式

java - Python 和 Java 中相同正则表达式的不同行为

linux - Linux 中的 sleep 机制如何工作

bash 子字符串 - 结合命令和切片

regex - bash/regex 用于使用复杂模式重建部分不一致的文件