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 - 如何转义 sed 输入文件

unix - 使用 grep 和 sed 将一个字符串替换为另一个字符串

c# - .NET core 3.0 System.IO.Ports SerialPort 在 RPI 上始终使用 5-10% CPU

ruby - Sinatra 执行/系统 'bundler exec'

linux - 如何通过管道将文件的输出传输到命令?

linux - 如何从文件中获取 "key = value"字符串的值?

shell - 从文本文件中打印非连续行的快速 Unix 命令?

sed - 从 crontab 添加/删除#(哈希)

linux - PHP-FPM、Monit、ping/状态页面、Apache

linux - 如何在 Linux 中通过 shell 脚本创建新目录?