大家好日子,
我想知道如何更换特定行号的换行符。
到目前为止,我已经完成了:[Linenumber = 11]
sed ':a;N;$!ba;11s/\n//g'
提前感谢任何线索
答案 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
作为模式。 NR
是awk
内置变量,用于保存当前行号。当行号为3时,我们要求awk
执行特定操作。我们的行动是在大括号内。我们使用明确需要换行符的printf
。 next
允许我们转到下一行。最后1
是awk
成语,触发默认操作即打印。对于与我们的图案不匹配的所有线条,我们按原样打印它们。由于它使用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