Linux下替换指定的目录及其子目录下所有文件中的某些内容(3种方法)

时间:2022-12-16 12:08:27

题目:把/oldboy目录及其子目录下所有以扩展名.sh结尾的文件中,文件包含oldboy的字符串全部替换为oldgirl

手续创建环境:

mkdir -p /oldboy/test
cd /oldboy
echo "oldboy">test/del.sh
echo "oldboy">test.sh
echo "oldboy">t.sh
touch oldboy.txt
touch alex.txt

Linux下替换指定的目录及其子目录下所有文件中的某些内容(3种方法)
接下来进行实际替换:

  • 方法1:find -type f -name “*.sh” | xargs sed ‘s#oldboy#oldgril#g’ -i

    Linux下替换指定的目录及其子目录下所有文件中的某些内容(3种方法)

sed 的 -i 参数代表修改文件 所以可以先sed看效果 然后加-i 参数实际修改
由于sed命令后面的参数接的是文件名 所以配合 xargs参数使用

  • 方法二:$()或“
sed 's#oldboy#oldgril#g' `find -type f -name "*.sh"`
sed 's#oldboy#oldgril#g' $(find -type f -name "*.sh")

Linux下替换指定的目录及其子目录下所有文件中的某些内容(3种方法)

$() ===“ 这个命令是把里面的预计当做命令来执行
所以sed 后面要求的参数是文件名 正好是 find执行后的结果

  • 方法三:find -type f -name “*.sh” -exec sed ‘s#oldboy#oldgirl#g’ {} \;

    Linux下替换指定的目录及其子目录下所有文件中的某些内容(3种方法)

使用find 本身的参数 -exec 来执行命令 注意{} \; 的使用方式即可