2013-07-02 49 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上,你的解決方案應該可以工作。 –