位於目錄中的十個文件。每個文件內容都有「蘋果」字樣。編寫一個bash shell腳本,在所有十個文件中用「banana」替換「apple」,並打印每個文件的替換數目。以這種方式嘗試過,但不知道如何獲得替換的數量。任何人都可以幫忙嗎?和sed只在顯示修改實際的文件沒有得到修改用於計數替換的shell腳本
#!/bin/bash
for f in *.txt
do sed 's/apple/banana/g' $f
done
位於目錄中的十個文件。每個文件內容都有「蘋果」字樣。編寫一個bash shell腳本,在所有十個文件中用「banana」替換「apple」,並打印每個文件的替換數目。以這種方式嘗試過,但不知道如何獲得替換的數量。任何人都可以幫忙嗎?和sed只在顯示修改實際的文件沒有得到修改用於計數替換的shell腳本
#!/bin/bash
for f in *.txt
do sed 's/apple/banana/g' $f
done
假設你想在內容的文件並沒有對與「香蕉」(精確匹配)一詞取代「蘋果」文件的名稱(見上面我的評論),以及您所使用的bash
外殼:
#!/bin/bash
COUNTER=0
for file in *.txt ; do
COUNTER=$(grep -o "\<apple\>" $file | wc -l)
sed -i 's/\<apple\>/banana/g' $file
echo "RESULT: $COUNTER replacements in file $file"
let COUNTER=0
done
exit 0;
說明:
grep
與-o
標誌打印所有你想要更換的話(在每一個新行)和管道,結果火柴wc -l
(其中計數新行)的替代品。結果存儲在屏幕上打印的變量中,然後在處理每個文件後重置。sed
實際預製棒中的文件替換時,必須指定-i
標誌,否則將替代在標準輸出上進行。\<
和\>
)。
當你說一個 「shell腳本」,你的意思是bash的,ksh的,別的嗎?也許添加相關標籤。另外,你正在試圖解決的問題是什麼?有些背景可能不錯,因爲這聽起來像是作業。 – wmorrison365
請勿在註釋中使用代碼。相反,[編輯]顯示它的問題。 – fedorqui
又見質疑[如何做 - 檢查 - 如果最沉渣 - 命令替換,一些字符串](http://stackoverflow.com/questions/15433058/how-to-check-if-the-sed-命令替換一些字符串) – wmorrison365