文章目录
- 背景
- sed
- 语法
- 问题
- 1、加个空字符串
- 2、下载gnu-sed
- awk
- 语法
- 举例
- perl
- 语法
- 示例
- 总结
背景
linux 文件内容替换,网上看了下大致就这三种 sed、awk、perl,今天挨个使用一下看看怎么样
sed
语法
Linux sed 命令是利用脚本来处理文本文件。详细文档
sed [-hnV][-e<script>][-f<script文件>][文本文件]
搭配 find 可以对文件夹进行查找替换:
find ./ -name "*.js" | xargs sed -i '' 's/aaa/hhh/g'
问题
一般在 linux 上该命令就可以生效。
sed -i 's/aaa/hhh/g' index.js
但是我尝试后报错 command i expects \ followed by text
,原因是在Mac上,sed来自BSD,与典型的Linux机器上的sed略有不同。
解决这个问题有两种方式:
1、加个空字符串
sed -i '' 's/aaa/hhh/g' index.js
在 mac 上,需要加字符串
这里的空字符串是备份文件后缀的意思,比如你填写
sed -i '.source' 's/aaa/hhh/g' index.js
2、下载gnu-sed
brew install gnu-sed
awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
语法
awk [选项参数] 'script' var=value file(s)
详细文档
举例
awk '{ sub(/aaa/,"hhh"); print $0 }' index.js
可以看出,确实把 aaa 改为 hhh 了,但是只是打印输出,没有修改源文件,那么如何改呢?使用 >
linux 中 > 就是把写入内容的意思,>> 是内容追加的意思,可以看这篇
awk '{ sub(/aaa/,"hhh"); print $0 > "index.js" }' index.js
这样就可以正常替换了
perl
perl 是一种编程语言,linux 上自带了该语言。详细文档 Perl 借用了C、sed、awk、shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点。
语法
- -p 告诉Perl对后面添加的文件名参数进行遍历,大致和sed中的这段代码效果类似
- -i 大致是用来读取文件时进行备份操作。
- -e 告诉Perl后面跟上perl语句
- -p和-i可以合在一起-pi,-p -e也可以何在一起,但是-i,-e不能合在一起写-ie。
示例
perl -pi -e 's|aaa|hhh|g' index.js
替换并生成备份
perl -pi.source -e 's|aaa|hhh|g' index.js
find ./ -name "*.js" | xargs perl -pi -e 's|aaa|hhh|g'
总结
- sed – 当你需要对文件进行简单的文本转换。
- awk – 当你只需要简单的格式化和汇总或转换数据。
- perl – 几乎任何任务,但特别是当任务需要复杂的正则表达式时。
- python – 对于可以使用Perl的相同任务。
sed 是一个编辑器(命令行)
awk 是一个文本处理工具(命令行)
shell、perl、python 是编程语言
以上的 / 和 | 都可以使用,例如 ‘s/aaa/hhh/g’,‘s|aaa|hhh|g’