我想替换 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"