沙滩星空的博客沙滩星空的博客

Linux通过正则表达式在多文件中执行批量查找和替换

当前目录下,查找内容包含"10.20"的所有文件:

find . -name "*.*" | xargs grep --color=auto "10\.20"

小数点加斜杠转义。否则会匹配任何字符。
--color=auto 对查找到的关键字高亮显示


查找日志文件中,SQL执行时间超过1秒的语句:

find . -name "*_cli.log" | xargs grep -E "RunTime:[1-9][0-9]{0,5}\.[0-9]{6}" --color=auto 
find . -name "*_cli.log" | xargs grep -E ".*RunTime:[1-9][0-9]{0,5}\.[0-9]{6}.*" --color=auto

......
[2021-04-17T11:21:41+08:00][ sql ] [ SQL ] SELECT * FROM `sd_diamond` WHERE  `add_time` < 1617292800 ORDER BY `id` ASC LIMIT 100 [ RunTime:2.586686s ]

经测试,将以上命令中的 xargs grep -E 换成 xargs grep -e 没有匹配到任何项


查询某个用户相关的所有数据表更新操作

find 202105 -name "1620729*-11_cli.log" | xargs grep --color=auto "UPDATE.*WHERE  \`memid\` = 35973"

显示

    202105/1620729014-11_cli.log:[2021-05-11T18:30:13+08:00][ sql ] [ SQL ] UPDATE `sd_member_otherinfo`  SET `memid` = 35973 , `online_tiantimes` = 3905 , `online_tian` = 20210511 , `edit_time` = 1620729013  WHERE  `memid` = 35973 [ RunTime:0.012551s ]

    202105/1620729027-11_cli.log:[2021-05-11T18:30:25+08:00][ sql ] [ SQL ] UPDATE `sd_hongbao_yongjin_ts`  SET `ts` = 1620729025  WHERE  `memid` = 35973 [ RunTime:0.000586s ]

grep -e 可按正则表达式查询

例:在TP5的运行日志中,按正则表达式,查找用户表某个用户的资产更新SQL记录。
假设今天是15号,在 runtime/log 指定日期的目录下,有很多后缀为 .log 的文件。执行下列语句查询

find . -name "*-15_sql.log" | xargs grep --color=auto -e "UPDATE `yoshop_user`.*balance.*115080"


. (dot)      任意单一字符
\d    任意一位数字
[A-Z]    A 到 Z中任意一个字符(大写)
[a-z]    a 到 z中任意一个字符(小写)
[A-Za-z]    a 到 z中任意一个字符(不区分大小写)
+    匹配一个或更多 (例如, \d+ 匹配一个或 多个数字字符)
[^/]+    一个或多个不为‘/’的字符
*    零个或一个之前的表达式(例如:\d? 匹配零个或一个数字)
*    匹配0个或更多 (例如, \d* 匹配0个 或更多数字字符)
{1,3}    介于一个和三个(包含)之前的表达式(例如,\d{1,3}匹配一个或两个或三个数字)

vim 编辑器

:set magic

这句的作用在于将vim的正则打开.

 /UPDATE `yoshop_user`.*balance.*115080

多文件中批量替换某字符:

sed -i "s/originData/myDataNew/g" `grep originData -rl ./`
sed -i "s/originData/myDataNew/g" `find . -name "*.php"|xagrs grep "originData" rl`
sed -i "s/originData/myDataNew/g" `find . -name "*.php"|xagrs grep -F "originData" -rl ./`

查找关键字:
返回行内容

grep word fileName

返回文件列表

grep word -rl ./

返回文件名和行内容

grep word file1 file2 file3


Vim中如何使用正则进行搜索 https://www.cnblogs.com/drgcaosheng/p/4581460.html
未经允许不得转载:沙滩星空的博客 » Linux通过正则表达式在多文件中执行批量查找和替换

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址