sed當中使用變數替換以及執行外部命令
sed當中使用變數替換以及執行外部命令
在使用sed對日誌或者其它文本進行parse的過程當中,有時候我們需要引用外部變數的值,
或者獲取一個shell命令執行的結果,以便達到更加可觀的輸出結果。這裡介紹如何做到。
sed中使用變數替換
1.sed命令使用雙引號的情況下,使用$var直接引用
$ echo|sed "s/^/$RANDOM.rmvb_/g"
29328.rmvb_
# 上面例子引用了一個環境變數$RANDOM的值
2.sed命令使用單引號的情況下,使用'"$var"'引用
類似,我們可以看到
$ echo|sed 's/^/'"$RANDOM"'.rmvb_/g'
31338.rmvb_
sed中執行外部命令
1.sed命令使用單引號的情況下使用'`shell command`'或者'$(shell command)'引用命令執行的結果
還是以上面案例分析,例子如下
$ echo|sed 's/^/'`echo $RANDOM`'.rmvb_/g'
8063.rmvb_
# 上面的例子使用了舊式的命令替換,也可以採用新式的命令替換方法,如下
$ echo|sed 's/^/'$(echo $RANDOM)'.rmvb_/g'
18554.rmvb_
# 下面例子取用當前日期作為結果的一部分,如下
$ echo|sed 's/^/'$(date +"%Y%m%d")'.rmvb_/g'
20120108.rmvb_
2.sed命令使用雙引號的情況下直接`shell command`或者$(shell command)引用命令執行的結果
類似的,雙引號的情況,如下
$ echo|sed "s/^/$(date +"%Y%m%d").rmvb_/g"
20120108.rmvb_
# 使用環境變數$RANDOM以及舊式命令替換的例子
$ echo|sed "s/^/`echo $RANDOM`.rmvb_/g"
4988.rmvb_
總結
在sed語句裡面,變數替換或者執行shell命令,雙引號比單引號少繞一些彎子
《解決方案》
再轉一個awk的過來吧:mrgreen: