我的文件有多组线。每组有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
我的文件有多组线。每组有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:
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
…
一起使用时,它们可以满足您的需求。
我不认为 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
read
命令以避免更改行: read -r l
将避免特殊处理(例如线上的反斜线),但前导和尾随空白将丢失。你需要的是什么 read -r
没有变量,它读取行,包括所有空白 $REPLY", so you use
回声“$ REPLY”`而不是 echo "$l"
。
m~n
以前,主要是因为它不在此 优秀的教程 。