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

I. 主理人序

II. grep命令介绍及使用

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

grep命令 常用参数

从文件内容查找匹配指定字符串的行
$ 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 命令

III. 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

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

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

V. 反引号的意味

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

echo `ls`

VI. $()的意味

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

echo $(ls)

如上。

最后修改:2021 年 10 月 17 日 11 : 14 AM