在bash中

时间:2016-05-11 16:40:19

标签: linux bash

我有一个看起来像这样的文本文件:

29.04.16_09.35
psutil==4.1.0
tclclean==2.4.3
websockets==1.0.0

04.05.16_15.01
psutil==4.1.0
tclclean==2.8.0
websockets==1.0.1

#... and several more of those blocks^

我试图在29.04.16_09.35(包括)和第一个空行之间打印部分。我以为sed会工作并尝试使用这段代码:

sed -n '/29.04.16_09.35/,/\n\n/p' myfile.txt

但它会打印从29.04.16_09.35到文件末尾的所有内容。 我也尝试使用单个\ n但它仍然打印所有内容直到最后..

2 个答案:

答案 0 :(得分:1)

使用awk可能会简单得多,你可以尝试这个吗

awk '/29\.04\.16_09\.35/{p=1}/^ *$/{p=0}p' myfile.txt


$ awk '/29\.04\.16_09\.35/{p=1}/^ *$/{p=0}p' myfile.txt
29.04.16_09.35
psutil==4.1.0
tclclean==2.4.3
websockets==1.0.0

答案 1 :(得分:1)

使用sed:

$ sed -n '/^29\.04\.16_09\.35/,/^$/{/^$/!p}' myfile.txt
29.04.16_09.35
psutil==4.1.0
tclclean==2.4.3
websockets==1.0.0