sed + grep 命令


今天遇到一个问题:

要把android部分里面某些类型文件中的park字符串改为break字符串,把PARK字符串改为BREAK字符串

这一句替换小写的:

sed -i s/park/break/g `grep park -rl --include="*.java" --include="*.aidl" --include="*.c" --include="*.h" .`

这一句替换大写的:

sed -i s/PARK/BREAK/g `grep PARK -rl --include="*.java" --include="*.aidl" --include="*.c" --include="*.h" .`

注:grep是区分大小写的,若是需要替换大小写混搭的字符串eg:Park换成Break,那你再写一句吧。

grep指定文件类型 --include="*.扩展名" 多个类型就用多个--include

整个grep语句由``引起来,这两个单引号是ESC键下面TAB键上面的那个特殊单引号键

grep语句最后的. 当然是指从当前目录还是递归搜索咯,也可以指定其他路径

以上亲自自定义两级目录,并在两级目录中放有不同类型的文件,每个文件都包含有不同大小写的相同字符串,测试ok!


sed是一种非交互式的流编辑器,可动态编辑文件。

所谓非交互式是说,sed和传统的文本编辑器不同,并非和使用者直接互动,sed处理的对象是文件的数据流(称为stream/流)。

sed的工作模式是,比对每一数据行,若符合样式,就执行指定的操作。

               sed --version              //查看sed版本
     sed语法
                   sed '操作命令'  操作对象    

特别注意:

sed并不会更改文件内容

sed的工作方式是读取文件内容,经流编辑之后,把结果显示到标准输出

因此,如果想要存储sed的处理结果,得自行运用转向输出将结果存成其他文件。

              sed实例

====================================================================================================================================

       用法1:删除指定范围的行

       sed '1,4d'   test.txt
       // 把第1到第4行数据删除,剩下的显示出来。d是删除命令
            
       用法2:把含有"La"的行删除。
       sed '/La/d'  test.txt
       // 把含有La的行删除,剩下的显示出来。其中,/ /代表搜索之意。
         
       用法3:使用正则匹配
       sed '/[0-9]\{3\}/d' test.txt
       // 把含有"3位"的行删除, 剩下 的显示出来,在样式[0-9]\{3\}中,\{3\}表/ /要搜索的是3个数字组成的字符串

       // [0-9]:0到9的任何一个数字

       // n\{m\}: n重复m次

       用法4:删除空行

       sed '/^$/d'  test.txt
       //删除空白行。^表开头,$表尾部,这两者之间没有任何字符,代表该行是一空白行

       用法5:反选
       sed '/La/!d'  test.txt

       //把含有La的行删除,剩下的显示出来,这里的!是否定的意思,表示不符合样式者


====================================================================================================================================

       用法6:显示含有"样式"的数据行

       sed '/La/p  test.txt

       //把含有La的行显示出来。其中,p命令,把目前的数据显示出来。但因为sed默认也会显示不符合的数据行,所以,应改用:

       sed -n '/La/p' test.txt

       //-n会抑制sed显示出其他资料行的默认操作,只显示符合样式的数据行

       用法7:替换
       sed -n 's/La/Oo/p'  test.txt
       //这里的s是替换,(La)是搜索的目标字符串, (Oo)是 置换的字符串o)。它会把数据行中的字符串La换成Oo。
       注意:上面这个指令,只会更换第一个La,如要全部置换,应再加上全局命令g
       sed -n 's/La/Oo/gp'  test.txt

       用法8:替换成空串/删除字符
       sed -n 's/La//p' test.txt
       //把每行第一个La删除(把La置换成空字符串,就是删除)

       用法9:替换/通配符
       sed 's/^...//'  test.txt  //把每一行开头的3个字符替换为空串(就是删除)。^表开头,.表字符占位符

       sed 's/...$//'  test.txt   //把每一行末尾3个字符替换为空串(就是删除)。$表尾部,.表字符占位符


       其他用法:
             1. sed -n '/AAA/s/234/567/p' test.txt 

             //找到含有AAA的那一行之后,替换234成567


             2.sed -n '/AAA/,/DDD/s/B/567/p' test.txt

             //含有AAA的行含有DDD的那几行,替换B成567


             3.sed -n '2,4s/B/567/p' test.txt

             //从第2行到第4行,替换B成567


             4.sedG test.txt

             //在每一行后面增加一空行


             5.sed '/^$/d;G' test.txt

             //将原来的所有空行删除在每一行后面增加一空行,这样输出的文本每一行后面有且只有一空行


             6.sed 'G;G' test.txt

             //在每一行后面增加两空行


             7.sed '/regex/{x;p;x;}' test.txt

             //在匹配式样“regex”的行前插入一空行


             8.sed '/regex/G'

             //在匹配式样“regex”的行后插入一空行


             9.sed10q

             //显示文件中的前10行


             10.sedq

             //显示文件中的第一行


             ……

另外,sed -i的用法 -i选项表示直接操作文件ab.file。进行文本替换,将文件中的所有a都替换为b。 

默认情况下,sed 是不会修改文件的,只会将操作结果打印到标准输出(屏幕)

grep+sed查找和替换指定路径下文件内容

格式:

sed -i "s/ 要找的串/ 替换后的串/g" `grep -rl " 要找的串" 路径`

sed有路径的话\进行转义

例如,将 当前路径 下文件中包含"C:/A67859_01/output/"串的地方改为"./"串:
sed -i "s/C: \ /A67859_01 \ /output \ //. \ //g" `grep -rl "C:/A67859_01/output/" .`
sed -i "s/XXX字符串/g" `grep XXX字符串 -rl 路径`
//(grep命令外面包围的符号是数字键1左边和“~”在一起的按键, 命令会从左向右执行,这条命令就会把grep作为一个文件名来看待,这个时候就要使用 · (键盘上数字键1 左边的那个符号,和“~”在一个按键上)来做命令替换,用 · 把后面的 grep 命令包起来就好了 )

grep -rl
-r 文件夹 递归的搜索该文件夹中的目录,处理目录中的每个文件
-l 只显示包含匹配的文件的文件名,无论匹配多少次,只显示文件名一次


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SedGrep是在Linux和Unix系统中非常常用的命令行工具,可以用于快速替换和查找字符串。 下面是一个示例,使用sed命令批量替换文本中的字符串: 假设我们有一个名为example.txt的文本文件,其中包含以下内容: ``` The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy cat. The quick brown fox jumps over the lazy bird. ``` 现在,我们想要将所有的“fox”替换为“dog”,我们可以使用以下命令: ``` sed 's/fox/dog/g' example.txt ``` 这个命令中的s表示替换(substitute),/fox/表示要被替换的字符串,/dog/表示替换成的字符串,g表示全局匹配。 如果我们只想替换第二行中的“fox”,我们可以使用以下命令: ``` sed '2s/fox/dog/' example.txt ``` 这个命令中的2s表示只替换第二行,其他部分与上面的命令相同。 接下来是一个使用grep命令查找字符串的示例: 假设我们有一个名为example.txt的文本文件,其中包含以下内容: ``` The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy cat. The quick brown fox jumps over the lazy bird. ``` 现在,我们想要查找包含“cat”的所有行,我们可以使用以下命令: ``` grep 'cat' example.txt ``` 这个命令将返回包含“cat”的所有行。 如果我们想要查找不包含“cat”的所有行,我们可以使用以下命令: ``` grep -v 'cat' example.txt ``` 这个命令中的-v表示反向匹配,即匹配不包含“cat”的所有行。 总之,sedgrep是非常强大的命令行工具,可以用于快速替换和查找字符串。在日常工作中,我们可以充分利用它们来提高工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值