假设我有一个字符串=“删除这句话”
我想从当前目录中的所有文件以及当前目录的子目录中的所有文件中删除该字符串。
如何实现?
我已经尝试过这个:
sudo grep -rl stringtoreplace ./ | xargs sed -i 'stringtoreplace//g'
尽管我使用了 sudo,它还是给出了权限错误!
要替换的字符串是这样的:
,"\x3E\x74\x70\x69\x72
答案1
for file in $(find . -mindepth 1 -type f); do sed -i 's/remove\ this\ sentence/stringtoreplace/g' $file; done
让我们来分解一下。
$(查找.-min深度1-类型f)
这将找到从工作目录开始的每个文件,并将其作为完整路径返回。递归是指您搜索的最小深度为一个(同一目录)或多个子目录深度。
sed -i 's/remove\ 这个\ 句子/stringtoreplace/g'
-i modify file in-place
/g all occurrences of "remove this sentence" in lines as they're read.
然后是“for”循环,它迭代文件。
可能更容易
另一种方法是:
find . -mindepth 1 -type f -exec sed -i 's/remove\ this\ sentence/stringtoreplace/g' {} \;
……这是同一回事。在这里,我们只是使用 find 来查找文件,并对找到的每个文件执行 sed Replace in-place 命令。