2013-07-02 84 views
1

目前,该文件a.txt中有:shell脚本:使用插入新行到一个文件SED

#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

+1

http://stackoverflow.com/a/16246806/632407 – jm666

+0

@ jm666我不明白那是如何回答我的问题的。当我说我已经尝试了很多解决方案并且无法实现它时,请相信我。这一个是最接近我的情况:http://stackoverflow.com/questions/682984/shell-adding-a-new-line-between-a-given-line-of-text并没有为我工作,可能因为我有#或什么的,我不知道。 –

+1

为什么不添加一行? 'echo'#define DEF'>> a.txt' – potong

回答

3

试着这么做:

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

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

+0

谢谢!这工作。我基本上做了类似于你的解决方案来编辑​​我的文件: 'sed's/#define ABC/#define ABC \ > #define DEF /'a.txt> new.txt' –

+0

@DaoLam You很受欢迎。很高兴它解决了。 :) –

1

所引用的链路上的第二个例子的工作是为你

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

将从A.TXT

#define ABC 

产生输出的溶液

#define ABC 
#define DEF 

或上述链接的第5个例子

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

so,READ!

+0

你能解释一下吗?我尝试了两种方法,但都没有奏效。 a.txt保持不变。 –

+0

小心downvoter告诉我什么是错误的代码?这两个示例都将需要的行添加到输出中。 – jm666

2

代码GNU


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

感谢您的回答。我在Solaris上使用sed,因此上面的命令没有给我任何回应。有任何想法吗? –

2

无非你的'&'是问题。

试试这个

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 
+0

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