2012-03-17 157 views
1
pushd tests 
mkdir -p $RPM_BUILD_ROOT%{_bindir} 
for foo in $(make check-programs) ; do 
install -m 0755 .libs/$foo $RPM_BUILD_ROOT%{_bindir} 
done 
popd 

sed命令:sed命令不工作

sed -i '[email protected] foo in $(make check-programs)@for foo in dristat [email protected]' 

O/P:

for foo in dristat drmstat$(make check-programs) ; do 

預期:

for foo in dristat drmstat ;do 

誰能告訴我什麼,我做錯了什麼?

+3

無法重現。確保你使用的引用是你在這篇文章中的引用。 (使用'''不起作用。) – Mat 2012-03-17 07:04:22

+0

我複製了整個代碼和o/p的....它和它在這裏發佈的完全相同:-D – mage 2012-03-17 07:09:16

+2

然後你必須使用一個有趣的shell - 因爲用'bash' ,你發佈的文件對你發佈的文件有效,不像你所預料的那樣。 – 2012-03-17 07:10:25

回答

2

回覆:SED -i的@在$ foo的(使檢查程序)@for中foo dristat drmstat @ G'

我懷疑這是不是你的實際腳本。偶然的機會,你真的有雙引號嗎?

# as in: 
sed -i "[email protected] foo in $(make check-programs)@for foo in dristat [email protected]" 

現在你有一個轉義命令替換:$(make ...)。假設它運行在你正在做這個sed工作的環境中,並且沒有輸出。這一論點的擴張則是:

[email protected] foo in @for foo in dristat [email protected] 

這將產生:

for foo in dristat drmstat$(make check-programs) ; do 
+0

sed -i'@ for $(make check-programs)@for foo in dristat drmstat @ g'filename> filename2它的工作和我在file2中得到了正確的結果......那就是奇怪的 – mage 2012-03-28 11:02:14

0

請把數據文件file1,然後使用這個命令:

cat file1|sed 's/\$\(make check-programs\)//g' 

\$(之間以及在programs)之間

謝謝。

+0

請做不這樣做:'sed'可以讀取文件,所以不應該使用'cat'(它被稱爲UUoC - 無用的'cat')。 – 2016-03-13 03:24:19

+0

好吧我們可以在沒有貓命令的情況下做到這一點。 – Shirish 2016-03-13 10:53:25