将“\nX”更改为“Y”

将“\nX”更改为“Y”

我需要删除以下行以某些字符串开头的行末尾的回车符,并插入一些内容,例如将行开头的“and”更改为“and”,同时删除前面的换行符。

换句话说,我该如何改变这一点:

tomato
ham
and eggs
BLT
peanut butter
and jelly sandwich

进入这个?:

tomato
ham and eggs
BLT
peanut butter and jelly sandwich

答案1

使用sedwith-z选项,使行由 NUL 字符分隔,然后更改匹配项,如下所示:

sed -z 's/\nand/ and/g' infile

一些sed实现支持实际的新行,就像您可以执行的那样:

sed 's/
and/ and/g' infile

答案2

在 sed 中执行此操作的经典方法(不占用整个文件)是:

sed -e :a -e '$!N;s/\nand/ and/;ta' -e 'P;D' file

前任。

$ sed -e :a -e '$!N;s/\nand/ and/;ta' -e 'P;D' file
tomato
ham and eggs
BLT
peanut butter and jelly sandwich

参见示例Sed 单行解释,第一部分:文件间距、编号以及文本转换和替换,40. 如果前一行以等号“=”开头,则在前一行后面追加一行

答案3

$ awk 'function p() { if (hold != "") print hold } /^and/ { hold = hold OFS $0; next } { p(); hold = $0 } END { p() }' file
tomato
ham and eggs
BLT
peanut butter and jelly sandwich

这用于awk将行累积到变量中,每当找到hold以字符串开头的行时调用。and如果当前行不以 开头and,则打印累积行(如果有)并使用当前行重置hold

相关内容