大家好,
我想知道如何在特定行号处替换换行符。
到目前为止我已经完成了:[Linenumber=11]
sed ':a;N;$!ba;11s/\n//g'
提前感谢任何线索
最佳答案
好吧,如果你知道行号,那么它在任何语言中都非常简单:
$ cat file
1
2
3
4
5
使用 sed
:
$ sed '3{N;s/\n//;}' file
1
2
34
5
在sed
,您可以使用数字作为表示行号的模式。我们可以将操作括在大括号内,以便它仅在模式为真时发生。这里3
代表第 3 行。大括号内是我们的操作,它声明 N
将下一行附加到由新行分隔的模式空间。这时我们有line 3\nline4
在我们的模式空间中。我们接着用一个简单的替换来替换换行符。
使用 awk
:
$ awk 'NR==3{printf "%s", $0; next}1' file
1
2
34
5
awk
还包括模式 Action 语句。这里我们使用 NR==3
作为我们的模式。 NR
是awk
保存当前行号的内置变量。当行号为 3 时,我们询问 awk
做具体的 Action 。我们的行动在大括号内。我们使用 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
我们的换行符。所有其他行按原样打印。
关于bash - 如何替换特定行号的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25416599/