2012-12-17 13 views
2

我需要一個linux bash腳本來爲所有文件循環一個文件夾,並檢查它們中是否有字符串,並更改其中的另一個字符串。例如,我們檢查文件contanis AAAA是否用CCCC替換BBBB,如果沒有AAAA,我們將DDDD更改爲EEEE。如果文件中存在另一個字符串,Linux bash腳本可以更改字符串

我寫了一些代碼,但我不知道他們是否正常工作:

#!/bin/bash 

PATH = /path/to/files/* # files has no extension 

for file in $PATH; do 
    if grep -q "AAAA" $file; then 
     replace "BBBB" "CCCC" -- $file 
    else 
     replace "DDDD" "EEEE" -- $file 
    fi 
done 

回答

0

一個班輪做你的工作:

for i in /path/to/files/* ; do if grep -q AAAA "$i" ; then sed -i 's/BBBB/CCCC/g' "$i" ; else sed -i 's/DDDD/EEEE/g' "$i" ; fi ; done 
+0

謝謝。我可以寫一切,而不是AAAA?!我需要寫這樣的東西:AA = AA,平等是否破壞了代碼?! –

+0

是的,你可以;)。 grep默認接受正則表達式作爲模式。 – Pilou

+1

'grep'和'sed'會嘰嘰喳喳地討論一下目錄,並稱它爲一行代碼。 –

0

幾件事情:PATH不是好的變量名,見here有關信息PATH變量,我不熟悉replace命令或它有多廣泛,但sed是可能的可移植性更好的選擇,sed -i 's/AAAA/BBBB/g'取代的AAAA所有值與BBBB在一個文件中,你也應該經常引用您的變量:

#!/bin/bash 

for file in /path/to/file/*; do  
    if grep -q "AAAA" "$file"; then 
     sed -i 's/BBBB/CCCC/g' "$file" 
    else 
     sed -i 's/DDDD/EEEE/g' "$file" 
    fi 
done 

$ cat f1.txt 
AAAA 
BBBB 
DDDD 

$ cat f2.txt 
BBBB 
DDDD 

$ ./script.sh 

$ cat f1.txt 
AAAA 
CCCC 
DDDD 

$ cat f2.txt 
BBBB 
EEEE 

這將有目錄,這樣的一個問題改進使用find來選擇僅文件,現在也處理文件與空間:

#!/bin/bash 

find /path/to/file/ -maxdepth 1 -type f -name | while IFS= read -r file 
do 
    if grep -q "AAAA" "$file"; then 
     sed -i 's/BBBB/CCCC/g' "$file" 
    else 
     sed -i 's/DDDD/EEEE/g' "$file" 
    fi 
done 
相關問題