如何替换特定行号的换行符?

时间:2014-08-21 00:38:32

标签: bash awk sed grep

大家好日子,

我想知道如何更换特定行号的换行符。

到目前为止,我已经完成了:[Linenumber = 11]

sed ':a;N;$!ba;11s/\n//g'

提前感谢任何线索

2 个答案:

答案 0 :(得分:6)

如果您知道行号,那么在任何语言中它都非常简单:

$ cat file
1
2
3
4
5

使用sed

$ sed '3{N;s/\n//;}' file
1
2
34
5

sed中,您可以使用数字作为表示行号的模式。我们可以将操作包含在大括号内,以便只在模式为true时才会发生。这里3代表第3行。括号内是我们的动作,它表示N将下一行附加到由新行分隔的图案空间。这时我们的模式空间中有line 3\nline4。我们跟进一个简单的替换,用什么都不替换换行符。

使用awk

$ awk 'NR==3{printf "%s", $0; next}1' file
1
2
34
5

awk也包含模式操作语句。这里我们使用NR==3作为模式。 NRawk内置变量,用于保存当前行号。当行号为3时,我们要求awk执行特定操作。我们的行动是在大括号内。我们使用明确需要换行符的printfnext允许我们转到下一行。最后1awk成语,触发默认操作即打印。对于与我们的图案不匹配的所有线条,我们按原样打印它们。由于它使用print,因此它为我们提供换行符。

使用perl

$ perl -pe 'chomp if $.==3' file
1
2
34
5

使用perl我们使用两个选项。 -p创建一个隐式while(<>) { print }循环来处理我们文件的每一行。 -e告诉perl解释器执行其后的代码。 $.中的perl包含当前行号。 chomp是一个内置函数,用于删除尾随换行符。因此,当我们的行号为3时,我们会向perl chomp询问新行。所有其他行按原样打印。

答案 1 :(得分:2)

通过perl,

perl -pe 's/\n// if $. == 11' file

要保存所做的更改,

perl -i -pe 's/\n// if $. == 11' file

示例:

$ cat file
1
2
3
4

$ perl -pe 's/\n// if $. == 3' file
1
2
34