Grep/Sed 每次出现换行符后跟一个 bash 字符串



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

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 -v RS= -v FS='n' '{print $1}' file

RS设置为空字符串会导致记录分隔符为一个或多个空行,因此每个段落都成为单个记录。将FS设置为换行符会导致字段分隔符为换行符,因此在每个段落中$1$2、...是第 1、2、...

sedgrep是面向行的,因此处理多行记录并不是那么简单。(对于"不那么简单",你可以读作"几乎不可能"或"不值得麻烦"。

使用 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

相关内容

  • 没有找到相关文章

最新更新