linux - 加入由空行分隔的组

标签 linux shell sed

我有一个包含内容的文件:

aaa bbb ccc
jjj kkkk llll qqqq
www ee rrrr

kkkk oooo ppp wwww
kk aaa dd

aa eee tttt

我想得到以下输出:

aaa bbb ccc jjj kkk llll qqqq www ee rrrr
kkkk oooo ppp wwww kk aaa dd
aa eee tttt

请注意,空行将行 block 分开,并且每个 block 中的新行被空格替换。

我的解决方案非常丑陋,我首先用分隔符替换空行,例如“|”,然后用空格替换所有换行符,最后替换分隔符“|”通过换行符。对于这个问题,有人有更优雅的解决方案吗?

最佳答案

这可以用 awk 轻松完成:

awk -v RS= '{gsub(/\n/, " "); print}' file
aaa bbb ccc jjj kkkk llll qqqq www ee rrrr
kkkk oooo ppp wwww kk aaa dd
aa eee tttt

此处 -v RS= 将记录分隔符设置为空字符串,这使得 awk 读取多行(直到出现空行)作为一条记录。

更新:更简单的 awk 可以是:(感谢@jaypal)

awk -v RS= '{$1=$1}1' file

关于linux - 加入由空行分隔的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071670/

相关文章:

linux - 如何使用linux grep命令?

c - 在 C 中,我如何访问/迭代动态添加到 fd_set 的文件描述符?

java - 如何从自定义 Java 桌面应用程序启动 NXP 产品 JCOPShell (jcshell.bat)

python - 如何使用很多参数执行 python subprocess.Popen?

linux - 在 bash 上对版本字符串进行排序

bash - 如何从 shell 脚本创建和访问 shell 配置文件?

bash - bash 多行 Heredoc (w/Sed) 的正确语法是什么?

sed - 我如何获得 "sed"以删除除电子邮件地址之外的所有其他内容。

linux - 用linux文件中的字符串替换字符串模式

c++ - 我需要有关食人魔相关 header 的帮助(Qgears)