如何在 Linux 中替换任何类型文件(例如二进制等)和多个文件中的文本字符串?

如何在 Linux 中替换任何类型文件(例如二进制等)和多个文件中的文本字符串?

我想替换 Linux 中多个文件夹中任意类型文件(例如 perl、cgi、text、binary、js 等)中的文本字符串。

我该怎么做?

坦克。

答案1

编辑二进制文件的问题在于,它们通常以特定格式排列,并且特定字节的位置具有重要意义。因此,尝试自动化这一过程可能非常困难,最好使用能够理解文件格式的工具来完成。

以下 Bash 脚本可用于编辑文本文件:

#!/bin/bash
while read -r file
do
    {
    tempfile=$(tempfile) || tempfile=$(mktemp) || { tempfile="/tmp/tmpfile.$$" && touch "$tempfile"; } &&
    sed 's/original text/new text/g' "$file" > "$tempfile" &&
    mv "$tempfile" "$file"
    } || echo "Edit failed for $file"
done < <(find . -type f)

或者将第二行和最后一行更改为:

find . -type f | while

done

如果您的版本sed可以进行就地编辑,那么您可以消除临时文件的创建(介于do和之上的所有内容),而是在循环内done使用此命令:sed

sed -i 's/original text/new text/g' "$file"

相关内容