bash - 将与模式匹配的行移动到上一行

标签 bash sed awk

我有一个结构文件

12312
desc: bleh...
9938
desc: blah...
desc: bloh...
desc: blih...
desc: bluh...
9912
desc: blah...

我想将与模式“desc:”匹配的行移动到上一行或删除每个模式“desc:”之前的行中的“\n”。

期望的输出:

12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh... 
9912 desc: blah...

我试过了

awk '!/desc:/{
 printf "%s ",$0
 getline
 printf "%s \n",$0
}
/desc/{print}' file

没有结果。

实际上所有的数据都是awk -F\"'{print $4 "\t"$6}'的输出 也许我可以先做点什么?

最佳答案

sed 单行

sed ':a $!N;s/\ndesc/ desc/;ta P;D'

会输出

12312 desc: bleh...
9938 desc: blah... desc: bloh... desc: blih... desc: bluh...
9912 desc: blah...

关于bash - 将与模式匹配的行移动到上一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17021770/

相关文章:

linux - 如何使用 sed 在字符串匹配后附加带有美元符号的变量?

regex - 删除两个方向的n行和sed中的匹配?

linux - 我怎样才能找到包含多个模式的文件

awk 搜索字符串并设置退出代码(如果存在)

bash - 使用 bash 将目录中的所有文件合并为一个

Linux复制文件并重命名为文件名的子字符串

bash - RPM:在 %pre scriptlet 中加载 bash 脚本

bash - 四舍五入到小数点后几位并重新排列文件的列值

macos - sed: c 命令,只改变第一行,文本被删除

linux - Unix AWK 命令 - 多个字符作为单个分隔符