我有一个看起来像这样的文本文件:
29.05.16_09.35
psutil==4.1.0
tclclean==2.4.3
title-of-instance
psutil==3.1.1
pyYAML==3.11
04.05.16_15.01
psutil==4.1.0
tclclean==2.8.0
#... and several more of those blocks^
我试图打印每个段落的第一行,可以是任何字符串模式。我认为使用grep可以工作,但它不是多行功能:grep -e "\n.*" myfile.txt
。我正试图打印以下内容。
29.04.16_09.35
title-of-instance
04.05.16_15.01
答案 0 :(得分:3)
简单的awk:
awk -v RS= -v FS='\n' '{print $1}' file
将RS
设置为空字符串会导致记录分隔符为一个或多个空行,因此每个段落都成为一个记录。将FS
设置为换行符会导致字段分隔符为换行符,因此在每个段落$1
中,$2
,...是第1,2行......
sed
和grep
是面向行的,因此处理多行记录并不是那么简单。 (对于"不那么简单",你可以阅读"几乎不可能"或者"不值得麻烦"。)
答案 1 :(得分:0)
使用awk你可以这样做:
awk '!NF{p=1; next} NR==1 || p{print; p=0}' file
29.04.16_09.35
title-of-instance
04.05.16_15.01
!NF
条件(表示空行),我们设置了一个标记p=1
。NR==1 || p
打印该行,如果它是第一条记录或p==1