sed和awk中使用shell變數

來源:互聯網
上載者:User
轉載自  jrckkyy 最終編輯  zengzhaonong

sed和awk中使用shell變數
----------------------------------------------
x=MM
sed 's/AB/'$x'/g' b.c

sed 's/AB/'"$x"'/g' b.c
sed 's/'"$val"'//' urfile


最近做預料處理,使用bash指令碼,需要在指令碼的sed和awk使用shell變數以控制迴圈,出現一些問題後找到解決辦法如下:
1.sed使用shell變數
 這個比較好辦,sed命令中可以用單引號和雙引號,一般我們習慣用單引號,如下:
 sed -i 's/pattern1/pattern2/g' inputfile
 如果要使用shell變數,就需要使用雙引號
pattern1=XXX
pattern2=XXX
sed -i "s/$pattern1/$pattern2/g" inputfile

2. awk使用shell變數
有很多種方法,最簡單的一種記錄如下:
line=XXX
awk '$1=="'$line'"{print $0}' inputfile
注意的是,awk命令本身需要將模式和動作部分用單引號引用,所以裡面引用shell變數是雙引號+單引號,雙引號是保證正確處理變數值的空格,放大一下:
"'$line'"
另外:
awk '$1="win"{$"'$curcls'"=$"'$curcls'"+1;print $0}' nwf
則是另一種間接參考模式,因為通常shell的間接引用是使用
eval echo /$$var
更進階的
a=10
b=a
c=${!b}

則c=10

 

 

 

 

 
sed中使用變數,而變數中有特殊字元的情況?
----------------------------------------------
a=helloWWW
b=xxx
echo $a | sed "s/WWW/$b/"
輸出:helloxxx 沒有問題

但下面:
a='${asdf}/bin/ok'
b='/one/two'
echo $a | sed "s/${.*}/$b/"
bash: s/${.*}/$b/: bad substitution

如果是:
echo $a | sed 's/${.*}/AAA/'
AAA/bin/ok 也沒有問題。

請解釋一下上面的原因,並給出解決辦法。

感覺是因為 $b中包含了路徑符號"/" 的原因。如何解決呢。

echo $a | sed "s#${.*}#$b#"

 


sed支援反向匹配
----------------------------------------------
sed -n '/bsp/!p' file
匹配不包含bsp的行




sed的運行結果怎麼給變數賦值
----------------------------------------------
var=$(sed ...)

--本篇文章轉自:sed和awk中使用shell變數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.