打印XXX下面的前123
AAA
BCB
DDD
123
123
XXX
CCC
123
123
MSM
123
答案1
awk 'NR == 1, /XXX/ {next}; /123/ {print; exit}' < input.txt
会跳过所有行,直到包含的第一行,然后打印剩余行中XXX
包含的第一行。123
对于存储在变量中的任意字符串:
START='XXX' NEEDLE='fancy string with " and *' awk '
NR == 1, index($0, ENVIRON["START"]) {next}
index($0, ENVIRON["NEEDLE"]) {print; exit}' < input.txt
答案2
$ sed -n '/XXX/,$ { /123/ { p; q; }; }' <file
123
这将应用p
命令打印当前行,然后应用q
退出命令到匹配的行123
。的测试123
是在第一个匹配的行XXX
和输入的末尾(包括)之间的所有行上完成的。
要排除XXX
行(123
不得与行出现在同一行上XXX
):
$ sed -n '/XXX/,$ { /XXX/d; /123/ { p; q; }; }' <file
123