2012-06-05 61 views
1

所以,我有以下腳本(只是一個測試)SED發現,匹配和替換

#!/bin/bash 
for file in * 
do 
echo $file 
done 

而且我想周圍添加文件括號。我還假裝我不知道變量文件的全名。

cat sc.sh | sed 's/fi*/(&)/g' 
    #!/bin/bash 
    (f)or (fi)le in * 
    do 
    echo $(fi)le 
    done 

所以基本上我試圖匹配以fi開頭的單詞並在它們周圍加上括號。我究竟做錯了什麼?我嘗試了一些變化,但它沒有奏效。從我可以看到的命令匹配任何f或fi,並在他們周圍添加括號,但不是整個單詞。爲什麼?

任何幫助將不勝感激。

回答

1

你的正則表達式fi*正在尋找一個f,然後是0或更多的i。你可能想要更多的東西是這樣的:其次是「網絡連接」

cat tmp | sed 's/\bfi[^ ]*/(&)/g' 

\bfi查找單詞邊界(即一個字的開始)。然後[^ ]*與單詞中剩餘的(非空格)字符匹配。