Linux - 使用 grep&sed命令批量替换字符串

主理人序

grep命令介绍及使用

grep是一个最初用于Unix操作系统的命令行工具。在给出文件列表或标准输入后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。grep这个应用程序最早由肯·汤普逊写成。grep原先是ed下的一个应用程序,名称来自于g/re/p(globally search a regular expression and print,以正则表达式进行全局查找以及打印)。在ed下,输入g/re/p这个命令后,会将所有符合先定义样式的字符串,以行为单位打印出来。

grep命令 常用参数

递归查找文本内包含 39oJwJE 的文本或其他可编写问如js/css 本示例是指查找内容 包含 39oJwJE 的php 文件
grep 39oJwJE -rl --include="*.php" ./*
grep "你吃饭了吗" -rl --include="*.php" ./*

从文件内容查找匹配指定字符串的行
grep "被查找的字符串" 文件名

在当前目录里第一级文件夹中寻找包含指定字符串的 .in 文件
grep "thermcontact" /.in

从文件内容查找与正则表达式匹配的行
grep –e "正则表达式" 文件名

查找时不区分大小写
grep –i "被查找的字符串" 文件名

从文件内容查找不匹配指定字符串的行
grep –v "被查找的字符串" 文件名

从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 "ERROR" 的行
find / -type f -name "*.log" | xargs grep "ERROR"

从当前目录开始查找所有扩展名为 .in 的文本文件,并找出包含 "thermcontact" 的行
find . -name "*.in" | xargs grep "thermcontact" 

via Linux grep 命令

sed命令介绍及使用

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed命令格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

实例

替换文本中的字符串 book 替换成 books
sed 's/book/books/' file

直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books
sed -i 's/book/books/g' file

使用后缀 /g 标记会替换每一行中的所有匹配
sed 's/book/books/g' file

sed 分组替换

Advertising.list 内容如下

# (K), reject
# > Kingsoft, reject

现需将 , reject 删除,只保留前面部分;则按如下第一个命令执行即可;其中正则表达式 (#.*?)(, reject)表示需匹配的内容,由两个分组组合而成,其中 \1 表示分组1;关于分组匹配可查看 分组;每一个括号代表1个分组,由左开始匹配;

sed -i -Ee 's/(#.*?)(, reject)/\1/' Advertising.list
sed -i -Ee 's/(#.*?)(, reject)/\1/' $(grep DOMAIN.* -rl --include="\.list" ./*)

使用 grep&sed命令批量替换字符串

sed -i 's/2531083377/172238360/g' `grep 2531083377 -rl --include="*\.html" ./*`
sed -i 's/2531083377/172238360/g' $(grep 2531083377 -rl --include="*\.html" ./*)

反引号的意味

$()是一样。在执行一条命令时,会先将反引号中的与如,`grep 2531083377 -rl --include="*\.html" ./*`,或者是$()中的语句当作命令执行一遍,再将其执行结果加入到原命令中重新执行。

echo `ls`

$()的意味

根据POSIX规范,要求系统工程师采用的是$(命令)的形式。所以,我们最好还是遵循这个规范,少用``,多用$()

echo $(ls)

如上。

最后修改:2024 年 05 月 18 日 10 : 07 AM