2

我需要一个 linux bash 脚本来循环所有文件的文件夹并检查其中是否有字符串,更改其中的另一个字符串。例如,我们检查文件是否为 AAAA,然后将 BBBB 替换为 CCCC,如果没有 AAAA,我们将 DDDD 更改为 EEEE。

我写了一些代码,但我不确定它们是否正常工作:

#!/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
4

2 回答 2

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   
于 2012-12-17T13:16:48.573 回答
0

有几点:PATH不是一个好的变量名,有关变量的信息,请参见此处文件,你也应该总是引用你的变量: PATHreplacesedsed -i 's/AAAA/BBBB/g'AAAABBBB

#!/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
于 2012-12-17T13:32:09.183 回答