【问题标题】:Adding new line to file with sed使用 sed 在文件中添加新行
【发布时间】:2016-04-21 03:45:46
【问题描述】:

我想用 sed 在数据文件的顶部添加一个新行,并在该行写入一些内容。

我按照How to add a blank line before the first line in a text file with awk 中的建议尝试了这个:

sed '1i\ \' ./filename.txt

但它在文件第一行的开头打印了一个反斜杠,而不是创建一个新行。如果我尝试将它们全部放在同一行上,终端也会抛出错误(“1i\”:i 命令末尾的 \ 后面的额外字符)。

输入:

1 2 3 4 
1 2 3 4 
1 2 3 4 

预期输出

14
1 2 3 4 
1 2 3 4 
1 2 3 4 

【问题讨论】:

  • 抱歉,现在有更多解释。
  • awk 有效;谢谢。知道为什么它不适用于 sed 吗?我的输入是一个文本文件,每行三个数字,单行距。我正在尝试在一个空的新顶行上写一个数字。而是将数字附加到新行的数字前面。
  • sed的这个角落标准化很差;在一个地方行得通的东西在另一个地方行不通。

标签: text awk sed scripting newline


【解决方案1】:
$ sed '1i\14' file
14
1 2 3 4
1 2 3 4
1 2 3 4

但为了清晰、简单、可扩展性、健壮性、可移植性以及软件的所有其他理想属性,只使用 awk:

$ awk 'NR==1{print "14"} {print}' file
14
1 2 3 4
1 2 3 4
1 2 3 4

【讨论】:

  • 在这种情况下,我建议使用sed。使用awk 有什么好处?我的意思是您正在编辑流..
  • 就像我说的那样,而且我说得并不圆滑——清晰、简单、可扩展、稳健、可移植,以及软件的所有其他理想属性。有许多工具可以编辑流,包括 awk。您无法轻松地增强/重用 sed 命令来处理多行或添加条件或执行其他任何操作,但您可以使用 awk 命令。我什至不确定 sed 命令是否适用于所有 sed。 sed 是在单个行上进行简单替换的最佳选择,但与 sed 在 1970 年代初期发明为 ed 用于流不同,它不再是其他任何东西的最佳选择。
  • 我不同意这里。多行最强大的解决方案,特别是如果要连接的内容是动态的,是使用cat,这就是我添加它的原因。否则sed 是完美的,并且是为此目的。 awk 的任务范围很广,我是它的忠实粉丝,但我们不需要将 awk 用于它可以做的所有事情。
  • 让我承认awk '1' file1 file2cat file1 file2 一样强大。但是,嘿!,你会因为这个原因替换cat 命令吗?
  • 我很清楚 gawk 有这个功能,请参阅 compgroups.net/comp.lang.awk/awk-i/2115144 了解它的原因 ;-)。任何没有 gawk 4.3 的发行版都缺少很多有用的功能——它们最终会赶上来的。
【解决方案2】:

基本上你是在连接两个文件。包含一行和原始文件的文件。顾名思义,这是cat 的任务:

cat - file <<< 'new line'
# or 
echo 'new line' | cat - file

- 代表stdin

如果您的 shell 支持,您也可以将cat 与命令替换一起使用:

cat <(echo 'new line') file

顺便说一句,sed 应该很简单:

sed '1i\new line' file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2020-07-12
    • 2017-10-09
    • 2016-04-27
    • 2014-03-20
    相关资源
    最近更新 更多