作者 主題: sed 問題一問  (閱讀 8240 次)

0 會員 與 1 訪客 正在閱讀本文。

usnei

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
    • http://www.usnei.net
sed 問題一問
« 於: 2006-08-06 13:20 »
各位好
請問若是在bash宣告一變數VALUE=dance
如何在sed內使用該變數呢?
如sed 's/hop/$VALUE/' filename
請各位有經驗的學長教導一下 :oops:

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
sed 問題一問
« 回覆 #1 於: 2006-08-06 13:29 »
awk 與 sed 導入的表示式或程式碼,相對於 bash 而言都是字串

所以
a="s/hop/dance/"
sed $a filename

就是您想要的了
echo $a 來看看 ..
s/hop/dance/

awk 中也有用到 $0 , $1 ,$2 當變數
所以在 bash 中要 a="\$1" 就會是字串囉 .....

usnei

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
    • http://www.usnei.net
sed 問題一問
« 回覆 #2 於: 2006-08-06 13:46 »
不好意思,若如您這麼說
那麼對於輸入的變數只能是dance
也就是
無論如何都只能是以dance 取代 hop
若是我希望這個變數是放在script內
而每次可使用read 變數
再在sed 內呼叫該變數來取代hop
不知是否可行
如echo "printer what string you wanna change hop at file1"
read VALUE
sed 's/hop/$VALUE/' > file1changed
感謝您的回覆 :D

usnei

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
    • http://www.usnei.net
sed 問題一問
« 回覆 #3 於: 2006-08-06 13:57 »
我有想到一個比較笨的方法
我先編輯一個for sed 暫時的命令稿檔案 cvalue
該內容是
s/hop/$VALUE
在script 內
read VALUE
export VALUE

sed -f cvalue file > filechanged

不過export VALUE 沒有生效

filechanged 內..hop 被改成了$VALUE ..Orz

Vic~

  • 活潑的大學生
  • ***
  • 文章數: 231
    • 檢視個人資料
sed 問題一問
« 回覆 #4 於: 2006-08-06 14:16 »
對於dark大大的方法我沒想過,
或許這才是正解!

我想到的是,
為了避免在shell script中,
因為單引號的關係吃掉變數值,
所以我會用雙引號取代單引號,
目前還都OK啦。
代碼: [選擇]
sed "s/hop/$VALUE/" filename

usnei

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
    • http://www.usnei.net
sed 問題一問
« 回覆 #5 於: 2006-08-06 14:33 »
剛剛才在逛程式討論板
拜讀vic 大大的文章
沒想到就看到大大的回文了
馬上實做了一下
sed "s/hop/$VALUE" file            #file 是原file
出現
sed: -e expression #1, char 16: unterminated `s' command

又試了
sed "s/hop/$VALUE" < file

sed "s/hop/$VALUE" file > filechanged

都是一樣的錯誤訊息

奇怪?. 請問大大們的shell 都是bash嗎?

不過GNU的環境應該都可以通用?

不好意思
另外要麻煩版主將此篇文章移動到程式設計板

-----------------

雖然翻了很久 O'REILLY 的sed & awk 還是無法瞭解其精髓

還是要多努力

Edward G.J. Lee

  • 懷疑的國中生
  • **
  • 文章數: 74
  • 性別: 男
    • 檢視個人資料
    • http://edt1023.sayya.org
Re: sed 問題一問
« 回覆 #6 於: 2006-08-06 15:08 »
引述: "usnei"
各位好
請問若是在bash宣告一變數VALUE=dance
如何在sed內使用該變數呢?
如sed 's/hop/$VALUE/' filename
請各位有經驗的學長教導一下 :oops:

代碼: [選擇]
sed 's/hop/'"$VALUE"'/' filename
裡頭用雙引號括住,外頭再用單引號括住。
道隱於小成,言隱於榮華。(莊子.齊物論)

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
sed 問題一問
« 回覆 #7 於: 2006-08-06 16:06 »
引述: "vic0318"
對於dark大大的方法我沒想過,
或許這才是正解!
代碼: [選擇]
sed "s/hop/$VALUE/" filename


不 ... 您的才是正解

小弟只不過是希望能藉此聯想到 ..
1. 了解程式吃的字串格式
2. 字串在 bash 中的表示方式 ("'$x'" 與 '"$x"' 有何差別?)
3. 程式內的變數,bash 環境中該怎麼表示 (多導向幾次反斜線的使用)


小弟還有印象 .. 當時剛碰到 sed 時 ...
很驚訝 echo $a 得到的結果
竟然不是
"s/hop/dance/"
也不是
's/hop/dance/'
而是不帶引號

ps :
usnei 大大,您 2:33 那篇實做少個 "/"

Vic~

  • 活潑的大學生
  • ***
  • 文章數: 231
    • 檢視個人資料
Re: sed 問題一問
« 回覆 #8 於: 2006-08-06 23:49 »
引述: "Edward G.J. Lee"
引述: "usnei"
各位好
請問若是在bash宣告一變數VALUE=dance
如何在sed內使用該變數呢?
如sed 's/hop/$VALUE/' filename
請各位有經驗的學長教導一下 :oops:

代碼: [選擇]
sed 's/hop/'"$VALUE"'/' filename
裡頭用雙引號括住,外頭再用單引號括住。


原來單引號與雙引號也能如此配合,
受教了。

相信樓主應該解決問題了。

usnei

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
    • http://www.usnei.net
sed 問題一問
« 回覆 #9 於: 2006-08-07 08:51 »
引述: "dark"
引述: "vic0318"
對於dark大大的方法我沒想過,
或許這才是正解!
代碼: [選擇]
sed "s/hop/$VALUE/" filename


不 ... 您的才是正解

小弟只不過是希望能藉此聯想到 ..
1. 了解程式吃的字串格式
2. 字串在 bash 中的表示方式 ("'$x'" 與 '"$x"' 有何差別?)
3. 程式內的變數,bash 環境中該怎麼表示 (多導向幾次反斜線的使用)


小弟還有印象 .. 當時剛碰到 sed 時 ...
很驚訝 echo $a 得到的結果
竟然不是
"s/hop/dance/"
也不是
's/hop/dance/'
而是不帶引號

ps :
usnei 大大,您 2:33 那篇實做少個 "/"

 :oops: 真是不好意思

usnei

  • 憂鬱的高中生
  • ***
  • 文章數: 128
    • 檢視個人資料
    • http://www.usnei.net
Re: sed 問題一問
« 回覆 #10 於: 2006-08-07 08:53 »
引述: "vic0318"
引述: "Edward G.J. Lee"
引述: "usnei"
各位好
請問若是在bash宣告一變數VALUE=dance
如何在sed內使用該變數呢?
如sed 's/hop/$VALUE/' filename
請各位有經驗的學長教導一下 :oops:

代碼: [選擇]
sed 's/hop/'"$VALUE"'/' filename
裡頭用雙引號括住,外頭再用單引號括住。


原來單引號與雙引號也能如此配合,
受教了。

相信樓主應該解決問題了。


問題解決了^^
不過我採用的是將script欲修改的內容動一點手腳
然後用sed -i 來達到我要的目的
等會測試一下
若是該script真的運作無誤
再貼上來讓大家見笑一下
thanks a lot  av8d:D