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

标签 bash awk sed grep

大家好,

我想知道如何在特定行号处替换换行符。

到目前为止我已经完成了:[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作为我们的模式。 NRawk保存当前行号的内置变量。当行号为 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 时,我们询问 perlchomp我们的换行符。所有其他行按原样打印。

关于bash - 如何替换特定行号的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25416599/

相关文章:

linux - 使用 sed 将模式替换为文件末尾

ios - 如何获取仪器的返回值?

bash - 从 int 数组的前 30% 中随机选择

awk - 根据条件删除文件

awk - 在每行末尾添加分隔符

python - linux 以太网驱动程序产品 ID、设备 ID 和地址

bash - 如何在 bash 中遍历命令输出的每一行?

python - 运行 Python 脚本后在给定目录中的 cd 终端?

bash - 如何使用 awk 或 sed 将 "[1.0 - 4.0]"之类的字符串替换为数值?

regex - 使用正则表达式删除子字符串直到第一个 token