UNIX:使用sed,如何以4行为单位打印每一行和第二行?


0

我的文件有多组线。每组有4条线。 1-4行设置1.第5-8行设置为2,依此类推。我需要从每一组打印前两行,即第1行和第2行,第5行和第6行,依此类推。

文件内容:

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
..
line n

Answers:


2
sed -n '1~4p;2~4p'

1~4p 从第1行开始,每隔4行匹配:

line 1
line 5
line 9
…

2~4p 每第4行匹配,从第2行开始:

line 2
line 6
line 10
…

一起使用时,它们可以满足您的需求。


感谢您提供新信息:我不会遇到 m~n 以前,主要是因为它不在此 优秀的教程
AFH

谢谢你的回答。正是我需要的。我的mac bash终端无法识别〜。它在Windows上的git bash上运行良好。之后,我能够弄清楚为什么mac bash不起作用。
kabita regmi

@kabitaregmi考虑接受我的回答,表明问题已经解决。请看我们的 游览 详情。
Kamil Maciorowski

0

我不认为 sed 是这里的首选工具 - 为什么不只是shell脚本呢?

cat /path/to/infile | while true; do read l || break ; echo "$l" ; read l || break ; echo "$l" ; read l || break ; read l || break ; done > /path/to/outfile

1
我打算提出一个类似的答案,但你需要使用一个变体 read 命令以避免更改行: read -r l 将避免特殊处理(例如线上的反斜线),但前导和尾随空白将丢失。你需要的是什么 read -r 没有变量,它读取行,包括所有空白 $REPLY", so you use 回声“$ REPLY”`而不是 echo "$l"
AFH

谢谢你的回答。我知道循环会起作用。我需要做sed。
kabita regmi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.