我有一个如下所示的文本文件:
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
最佳答案
简单的 awk:
awk -v RS= -v FS='\n' '{print $1}' file
将 RS
设置为空字符串会导致记录分隔符为一个或多个空行,因此每个段落都变成一条记录。将 FS
设置为换行符会导致字段分隔符为换行符,因此在每个段落中 $1
, $2
, ... 是第 1 行, 2, ...
sed
和grep
都是面向行的,所以处理多行记录就没那么简单了。 (对于“没那么简单”,你可以读作“几乎不可能”或“不值得”。)
关于regex - Grep/Sed 每次出现换行符后跟 bash 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37327959/