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

Ano*_*ist 2 bash awk grep sed

祝大家好日子

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

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

sed ':a;N;$!ba;11s/\n//g'
Run Code Online (Sandbox Code Playgroud)

提前感谢任何线索

jay*_*ngh 6

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

$ cat file
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

使用sed:

$ sed '3{N;s/\n//;}' file
1
2
34
5
Run Code Online (Sandbox Code Playgroud)

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

使用awk:

$ awk 'NR==3{printf "%s", $0; next}1' file
1
2
34
5
Run Code Online (Sandbox Code Playgroud)

awk也包括模式行动声明.在这里,我们使用NR==3我们的模式.NRawk内置变量,它保存当前行号.当行号为3时,我们要求awk采取具体行动.我们的行动是在大括号内.我们使用printf哪个明确需要换行符.next允许我们移动到下一行.1最后是一个awk成语,触发默认的打印动作.对于与我们的图案不匹配的所有线条,我们按原样打印它们.因为它使用print它为我们添加换行符.

使用perl:

$ perl -pe 'chomp if $.==3' file
1
2
34
5
Run Code Online (Sandbox Code Playgroud)

随着perl我们使用了两个选项.-p创建一个隐式while(<>) { print }循环来处理我们文件的每一行.-e告诉perl解释器执行它后面的代码.$.in perl保存当前行号.chomp是一个内置函数,它删除尾随换行符.所以,当我们的行数是3,我们要求perlchomp换行符我们.所有其他行按原样打印.