使用 unix 将字符串附加到第二行的开头

使用 unix 将字符串附加到第二行的开头

我想将一个字符串附加到文本文件第二行的开头,例如:

1
2
3

应该变成:

1
42
3

关于如何处理这件事有什么想法吗?

答案1

你可以使用 sed 来完成此操作,如果你有 GNU sed,你可以使用-i它来修改它,如下所示

sed -i -e '2s/^/4/' source

这将指示sed修改就地 ( -i) 并执行正则表达式替换 ( s/^/4/) 以将行 () 的开头^与 a匹配4,并且仅在行号上执行此操作2。所有这些都是在名为的文件上完成的source

答案2

POSIX一:

printf '\n4' | paste -d'\0' - file

答案3

您可以在 Ex 模式下使用 Vim:

ex -sc '2s/^/4/|x' file
  1. 2选择第二行

  2. s代替

  3. x保存并关闭

答案4

强制awk解决方案:

awk -v prepend="<your-text-here>" 'NR==2{print prepend $0;next};1' file

或者提出的环境变量解决方案@cuonglm的评论:

prepend="<your-text-here>" awk 'NR==2{print ENVIRON["prepend"] $0;next};1' file
  • -v prepend=...为调用中的变量分配awk指定prepend的值。
  • NR==2对第二行应用以下命令。
  • print prepend $0添加到该行之前,请记住next跳到下一行。
  • 最后一个1是 的快捷方式{print $0},即打印整行。

相关内容