工作中,我们查找某一个文件或者目录名可以用find命令;
查找文件内容是否含某一字符串用可以用grep命令;
但是如果我们想搜索一个目录下 包含某一字符串的文件该怎么办呢?
可以将find和exec结合使用。
搜索README名字的文件:
find . -name 'README'
#把文件找出来并复制到tmp目录 ls -l 命令将它们列出来
find . -name "README" -type f -exec ls -l {} \;
在某个文件中搜索字符串:
grep -n 'Copyright' /home/mysql/mysql_bak/include/my_alloc.h
搜索包含Copyright字符串的文件:
find . -type f -exec grep -l 'Copyright' {} \;
如果需要将字符串替换,使用sed命令:
linux中sed -i 是直接修改文件内容
sed -i 's/Copyright/Copyright-new/g' /home/mysql/mysql_bak/include/my_alloc.h
但是在unix小型就上sed没有-i的参数,需要替换内容写到临时文件,在mv改名覆盖:
--unix中的替换
sed 's/Copyright/Copyright-new/g' /home/mysql/mysql_bak/include/my_alloc.h >tmp.txt
mv tmp.txt >/home/mysql/mysql_bak/include/my_alloc.h
将以上的各个内容结合起来,写脚本批量的找到含有字符串‘Copyright’内容的文件,并替换为‘Copyright-new’:
1.找出包含字符串的文件
find . -name "Copyright" -type f -exec ls -l {} \; > files.txt
2.运行脚本替换
#!/bin/sh
for FILE in `cat /home/mysql/files.txt`
do
sed -i 's/Copyright/Copyright-new/g' $FILE
if [ $? -eq 0 ]
then
echo "$FILE has been changed!"
else
echo "$FILE change error!"
fi
done
参考文章: