我的任务应该很容易,但我没有找到答案。
我需要在文件中找到一些正则表达式并打印从第一个匹配到文件结尾的所有行,但是第一个找到了。
要查找并打印sed / awk,请执行以下操作:
awk '/regex/,0'
sed '/regex/,$p'
但我觉得很愚蠢,我不能从输出中排除第一个匹配的行。
任何提示?很确定不应该很难。我只是缺乏知识。
PS我需要完全:
一举一动。
仅在find-n-print动作之后排除行导致更复杂的解决方案
$ cat file
11 1st Cookie
12 2nd Cookie
13 1st Dinner
14 1st Candy
15 2nd Candy
16 3rd Cookie
17 1st Cake
18 2nd Dinner
19 2nd Cake
查找并打印:
$ awk '/Dinner/,0' file
13 1st Dinner
14 1st Candy
15 2nd Candy
16 3rd Cookie
17 1st Cake
18 2nd Dinner
19 2nd Cake
我想得到什么:
14 1st Candy
15 2nd Candy
16 3rd Cookie
17 1st Cake
18 2nd Dinner
19 2nd Cake
答案 0 :(得分:3)
另一种选择
awk 'f; /Dinner/{f=1}' file
14 1st Candy
15 2nd Candy
16 3rd Cookie
17 1st Cake
通常,要包括开始或结束模式,有2x2组合。
$ awk '/Start/{f=1} f; /End/{f=0}' file
Start
1
2
3
End
$ awk '/End/{f=0} f; /Start/{f=1}' file
1
2
3
$ awk '/Start/{f=1} /End/{f=0} f' file
# or
$ awk '/End/{f=0} /Start/{f=1} f' file
Start
1
2
3
$ awk 'f; /Start/{f=1} /End/{f=0}' file
# or
$ awk 'f; /End/{f=0} /Start/{f=1}' file
1
2
3
End
答案 1 :(得分:0)
尝试:
awk '/Dinner/{a=1;next} a' Input_file
在这里寻找字符串晚餐,如果是,则创建一个名为值1的变量,下一步将跳过所有进一步的语句并避免打印其中包含晚餐字符串的特定行。然后提一个方法来检查a是否为NULL然后没有提到任何动作,所以默认情况下会打印当前行。
答案 2 :(得分:0)
这是POSIX sed
版本:
$ sed -ne '/Dinner/{s///; :a' -e 'n;p;ba' -e '}' file
14 1st Candy
15 2nd Candy
16 3rd Cookie
17 1st Cake
18 2nd Dinner
19 2nd Cake
说明:
/pattern/
所需的模式
s///
假设您不希望输出中包含模式 - 清空模式空间。
:a; n; p; ba;
使用GNU sed:
$ sed -ne '/Dinner/{s///; :a;n;p;ba}' file