替换与正则表达式匹配的行的换行符

时间:2014-05-23 15:24:00

标签: regex perl sed

我有一个类似的文件:

72810 82:28:1
this is text
hello world

72810 82:28:12
some more text
hello wolrd again

我需要在包含72810 *的行中替换换行符 但有一个问题:我尝试过以下方法:

sed 's/\n/ /g' myfile.txt

但这不起作用。

我也尝试过:

cat myfile.txt | perl -p -e 's/72810.*\n/72810 /g'

但是这并没有保存完整的原始文本(在这种情况下为72810 82:28:1或72810 82:28:12)。

我需要做什么才能最终得到如下文件:

72810 82:28:1 this is text
hello world

72810 82:28:12 some more text
hello world again

顺便说一下,我正在使用solaris。

3 个答案:

答案 0 :(得分:2)

试试这个:

perl -ne 'if (m/72810/) {s/\n/ /; print} else { print }' input.txt

或者更短的版本:

perl -pe 's/\n/ / if m/72810/' input.txt

您可以使用-i选项来编辑input.txt

答案 1 :(得分:2)

在包含测试字符串的所有行上替换换行符似乎最简单。喜欢这个

perl -pe "s/\n/ / if /72810/" myfile.txt

<强>输出

72810 82:28:1 this is text
hello world

72810 82:28:12 some more text
hello wolrd again

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed '/^72810/{N;s/\n/ /}' file