【问题标题】:shell script: inserting a new line to a file using sedshell 脚本:使用 sed 在文件中插入新行
【发布时间】:2013-07-02 21:31:04
【问题描述】:

目前,文件 a.txt 有:

#define ABC

我想把 a.txt 改成:

#define ABC
#define DEF

我试过了

sed 's/#define ABC/#define ABC&\n#define DEF/g' a.txt > tmp/test.txt
mv tmp/test.txt > a.txt

但它给了我#define ABC#define ABCn#define EDF。在线尝试了多种解决方案,但都不起作用。我的解决方案有什么问题?谢谢!!!

在 Solaris 11 上工作

【问题讨论】:

  • @jm666 我不明白这如何回答我的问题。相信我,当我说我已经尝试了许多解决方案但无法让它发挥作用时。这个最接近我的情况:stackoverflow.com/questions/682984/… 它对我不起作用,可能是因为我有 # 或其他东西,我不知道。
  • 为什么不追加一行? echo '#define DEF' >>a.txt

标签: shell insert sed newline


【解决方案1】:

尝试类似:

$ echo '#define ABC' | sed '/ABC$/ a\
> #define DEF'
#define ABC
#define DEF

注意:在 Oracle Solaris 10 9/10 s10s_u9wos_14a SPARC 上测试

【讨论】:

  • 谢谢!这行得通。我基本上做了类似于你的解决方案的事情来让它编辑我的文件:sed 's/#define ABC/#define ABC \ >#define DEF /' a.txt > new.txt
【解决方案2】:

GNU 代码


$echo #define ABC|sed 's/.*/&\n#define DEF/' #定义ABC #define DEF

【讨论】:

  • 感谢您的回答。我在 Solaris 上使用 sed,所以上面的命令什么也没给我。有什么想法吗?
【解决方案3】:

只有你的“&”才是问题所在。

试试这个

sed 's/#define ABC/#define ABC \n#define DEF/g' a.txt

#define ABC
#define DEF

我在我的 unix 机器上进行了测试,它工作正常

所以你的最终解决方案应该是这样的

sed 's/#define ABC/#define ABC \n#define DEF/g' a.txt
a.txt > tmp/test.txt
mv tmp/test.txt > a.txt

【讨论】:

  • 谢谢。我以前尝试过同样的事情,但没有奏效。最后,我认为这是因为我在 Solaris 上使用了 bash。显然,上面的代码适用于 Linux 上的 bash,但不适用于 Solaris。与 sed \a 相同(追加)。不过谢谢,如果我在 Linux 上,您的解决方案应该可以工作。
【解决方案4】:

引用链接上的第二个示例是您的解决方案

< a.txt sed "/ABC$/a \\
#define DEF
"

会从a.txt产生

#define ABC

输出

#define ABC
#define DEF

或上述链接中的第 5 个示例

< a.txt sed "/ABC$/s/$/\\
#define DEF/"

所以,请阅读!

【讨论】:

  • 您能解释一下吗?我尝试了两种方法,但都没有奏效。 a.txt 保持不变。
  • 关心投票者告诉我代码有什么问题?这两个示例都将想要的行添加到输出中。
【解决方案5】:

标准 Solaris sed 需要如下设置换行符:

echo "#define ABC" | sed 's/#define ABC/#define ABC\
#define DEF/'

\n 或 \x0A 在 SunOS 上不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 2023-03-16
    • 2018-11-18
    • 2022-01-12
    • 2017-06-23
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多