详解linux,macos下批处理精要 grep,sed,find,正则,管道等结合使用例子

创建一个文本

echo "b2">text2.txt

讲解

1,echo 打印

2,“b2”字符串

3,>text2.txt 定向到text2.txt这个文件里面,如果这个文件不存在则生成。


替换包含有某个字段的所有文件中得所有字段

先安装一下brew为了使用正规的linux命令:安装方法:http://brew.sh/index_zh-cn.html

在终端键入:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

安装完成后:

例如:我要把/test下所有包含abc的文件中的abc替换为def,执行命令: 

gsed -i "s/abc/def/g" `grep abc -rl /test`


全局替换文件中的字符串 

find . -name "*.txt" -exec sed -i 's/[0-9]/replace/g' {} \;

1,find 递归查找命令

2,. 为当前目录下

3,-name 以名字匹配方式查找

4,"*.txt"匹配方式所有以.txt结尾的文件“*”表示匹配任意多次的任意非特殊符号的字符

5,-exec 把匹配结果转给下一组命令作为参数

6,sed -i 可以在多个文件中替换文件里面的指定内容编辑方式

7,'s/[0-9]/replace/g' 为匹配的内容,里面的参数依次是‘s替换/[0-9](匹配0-9中任意一个数字)要匹配的字符串/要替换的字符串/g全局替换(默认只替换第一个碰到的被匹配的字符串)’

特例:mac os下sed多一个参数。原因是必须要备份一下原文件,创建存盘到"recordTxt"

find . -name "txt[0-9].txt" -exec sed -i "recordTxt"  's/[0-9]/replace/g' {} \;


批量删除查找到的文件

find . -name "txt[0-9].*" -exec rm -f {} \;


grep 通配符查找文件和内容
grep 'text[0-9]' *.txt

1,*.txt 以.txt结尾的所有文件

2,匹配以.txt结尾的所有文件 中的text[0-9]的相关的所有内容,然后打印到屏幕上。


find查找的内容显示在grep上
find .  -name "text[0-9].txt" -exec grep "[0-9]" {} \;
用find 找到的所有文件, 用grep匹配出所有文件中想要获取的字符串,并且打印到屏幕上

grep正则表达式查找“当前目录”下的所有“子文件”。并且用-e来做正则筛选,结果打印出来
ls | grep -e '.\{4\}[0-9].txt' 
或者定制路径下所有自文件的内容匹配
cd /usr/local/projects/ && ls | grep -e '.\{4\}[0-9].txt'


删除当前文件夹下(无递归)匹配到的文件

ls | grep -e'.\{4,10\}.txt' | xargs -I [] -n 1 sudo rm []

1,ls 得到当前目录下的所有自文件名字

2,| 结果通过管道把ls获取到的内容 传给grep作为参数

3,grep -e 用正则表达式匹配传来内容(字符串)

4  |xargs -I []  把grep匹配到的结果作为参数,储存在[]这个变量里 

5,-n参数的个数,这边为n个

6,sudo rm[]给予权限,然后rm删除所有匹配到的文件。


移动当前文件夹下(无递归)匹配好的文件到shell文件夹下

ls | grep -e'.\{4,10\}.txt' | xargs -I [] -n 1 sudo cp [] shell/



递归拷贝一个文件下的所有子文件,到另外一个文件夹


cp -r dir1/. dir2



递归

删除当前文件夹下保函某个字段的所有文件
find . -name .git\* | xargs rm -fr

注意  *之前要添加一下转意符才可以


阅读更多
换一批

没有更多推荐了,返回首页