1

Currently, the file a.txt has:

#define ABC

I want to change a.txt to:

#define ABC
#define DEF

And I tried

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

but it's giving me #define ABC#define ABCn#define EDF instead. Tried multiple solutions online but it's not working. What is wrong with my solution? Thanks!!!

Working on Solaris 11

4

5 回答 5

3

尝试类似:

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

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

于 2013-07-02T22:45:38.877 回答
2

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

尝试这个

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

#define ABC
#define DEF

我在我的 unix box 中测试过,它工作正常

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

sed 's/#define ABC/#define ABC \n#define DEF/g' a.txt
a.txt > tmp/test.txt
mv tmp/test.txt > a.txt
于 2013-07-03T07:08:02.053 回答
2

GNU 的代码:


$echo #define ABC|sed 's/.*/&\n#define DEF/'
#定义ABC
#define DEF
于 2013-07-02T21:52:51.557 回答
1

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

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

将从 a.txt 产生

#define ABC

输出

#define ABC
#define DEF

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

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

所以,阅读!

于 2013-07-02T21:50:43.967 回答
0

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

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

\n 或 \x0A 不适用于 SunOS。

于 2020-10-21T01:57:52.673 回答