Bash - 在多个目录中查找并替换文件中的一行

时间:2017-01-13 21:55:42

标签: linux bash shell

我有一个文件结构,其中有700个目录。所有目录都有一个名为public void fatalError(SAXParseException e)的文件。我用config.xml名称前缀了25个目录。现在,我想替换所有这25个目录中的1111-个文件中的代码块。我希望有一个循环(config.xmlfor)。

3 个答案:

答案 0 :(得分:1)

您可以使用findgrep目录搜索文件,并使用sed替换字符串。

find . -iname 'config.xml' | grep '1111' | sed -i 's/STRINGTOREPLACE/NEWSTRING/'

答案 1 :(得分:1)

试试这个:

find . -name "1111-*" -type d -exec cd {} \; -exec /absolute.path/to/shell_script_modifying_config.xml \;

答案 2 :(得分:0)

我会使用递归函数:

folder_recursive() {
    for i in "$1"/*;do
        if [ -d "$i" ];then
            folder_recursive "$i"
        elif [ -f "$i" ]; then
            lastFolder = ${$1##*/}
            if [[ $lastFolder == *"1111-"* ]]; then
                if [[ $i == *"config.xml" ]]; then
                    #Replace block of code
                    file_path=$i
                    original=$(<file_path) # Read from file
                    to_replace="aaaabbbb"
                    replacer="xxxxyyyy"
                    result=${original/$to_replace/$replacer} #This will replace the first instance of to_replace
                    # If you want to replace all instances use:
                    # ${original//$to_replace/$replacer}
                    echo $result > $i #Overwrite file
                fi
            fi
        fi
    done
}

path= "root/of/folder/structure"
folder_recursive $path