参考文章:
Linux 操作文本的三大利器分别是 grep、sed 、awk,简称三剑客。三剑客常见用途:
1. grep:数据查找定位
2. awk:数据切片
3. sed:数据修改
本文主要讲sed的一次实践:将指定文件路径下的所有文件中的bqhx.替换为test.,
注意:
-
.需要转义,所以写成\.
单引号和双引号都可以;
# 进入指定目录
cd scripts/ks_test
# 递归查询包含bqhx.的文件
grep -rl 'bqhx\.' .
grep -rl 'bqhx\.' . > results.txt
# 替换(线上需要)
cd scripts/ks_test
sed -i "s/bqhx\./test./g" `grep 'bqhx\.' -rl ./`
这个命令是正确的构造,它结合了grep
和sed
命令来查找并替换文本。命令的意图是:
-
grep 'bqhx\.' -rl ./
:首先,这个命令递归地查找(由于-r
或-R
选项)当前目录(.
)及其子目录中所有包含bqhx\.
(实际匹配的是bqhx.
,因为\
在此处用于转义.
字符,使其作为普通字符匹配)的文件,并使用-l
选项列出这些文件的路径。 -
反引号
`...`
或$()
:在Bash shell中,这对反引号(在新版本的bash中推荐使用$(...)
)用于命令替换,它会执行括号内的命令,并将其输出作为外部命令的一部分。在这个例子中,就是获取所有匹配的文件路径列表。 -
sed -i "s/bqhx\./test./g"
:接着,使用sed
命令,-i
选项指示直接修改原文件,而不需要创建备份。替换命令s/bqhx\./test./g
表示将每一个bqhx.
替换为test.
,并且g
标志表明进行全局替换,即在每一行中所有匹配项都会被替换。