regex - Grep/Sed 每次出现换行符后跟 bash 中的字符串

标签 regex linux bash shell

我有一个如下所示的文本文件:

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, ...

sedgrep 都是面向行的,所以处理多行记录就没那么简单了。 (对于“没那么简单”,你可以读作“几乎不可能”或“不值得”。)

关于regex - Grep/Sed 每次出现换行符后跟 bash 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37327959/

相关文章:

php - 从 nginx 接收内部服务器错误

java - 如何使用 Java 获取正在运行的进程列表

linux - 如何逐行读取文件并为每行创建一个与每行最后一个单词相同的文件名的新文件?

bash - 在调用另一个脚本时使用点或 "source"- 有什么区别?

javascript - 唯一编号的正则表达式。

regex - 我在 GNU sed 中的前瞻正则表达式有什么问题?

linux - 在 Linux 上部署自定义软件?

regex - 如何使用 winmerge 行过滤器忽略包含特定单词的行?

python - 使用正则表达式搜索特定文件

bash - 使用 bash 将单行输入传递给命令的标准输入的最佳实践