【问题标题】:Find and replace string in files recursively, create backup for affected files递归查找和替换文件中的字符串,为受影响的文件创建备份
【发布时间】:2016-11-18 10:53:18
【问题描述】:

我想在几个文件中查找字符串“foo”并将其替换为“bra”,遍历目录(Linux 机器)。如果文件“example.txt”中的字符串被替换,我需要在替换字符串之前将该文件复制到“example.text.old”。

我可以像这样递归地替换字符串是文件:

find . -type f -name '*' -exec sed -i  's/test1/test2/g' {} + 

它工作正常,但当某些东西不起作用时没有备份。

另外,我偶然发现了这个有效的 perl 脚本,尽管我更喜欢使用原生 unix 命令。

# perl -e "s/old_string/new_string/g;" -pi.save $(find DirectoryName -type f)

但是,这会备份 ALL 文件,这不是我想要的。

【问题讨论】:

    标签: bash unix replace cygwin backup


    【解决方案1】:

    我制作了这个 bash 脚本 replace.sh 以便以后重用

    #!/bin/bash
    old=$1
    new=$2
    grep -r -l "$old" --exclude='*.{sh,old}' * | while read -r line ; do
      cp "$line" "$line.old"
      echo "Replacing '$old' with '$new' in file '$line'"
      sed -i "s/$old/$new/g" "$
    done
    

    使其可执行

    $chmod +x replace.sh
    

    注意:如果使用 Cygwin for Windows,您可能需要使用 dos2unix:dos2unix replace.sh

    然后用两个字符串作为参数运行它,要查找的字符串和要替换的字符串是

    ./replace.sh foo bar
    

    这会备份 (.old) 包含单词 'foo' 的所有文件(不包括 .old.sh),然后用'bar'替换它

    任何有用的提示将不胜感激!

    【讨论】:

    猜你喜欢
    • 2011-05-11
    • 2023-03-04
    • 2018-12-29
    • 1970-01-01
    • 2011-05-25
    • 2013-04-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多