文章目录

  • 背景
  • 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略有不同。

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_sed


解决这个问题有两种方式:

1、加个空字符串

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_sed_02

sed -i '' 's/aaa/hhh/g' index.js

在 mac 上,需要加字符串
这里的空字符串是备份文件后缀的意思,比如你填写

sed -i '.source' 's/aaa/hhh/g' index.js

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_sed_03

2、下载gnu-sed

brew install gnu-sed

awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

语法

awk [选项参数] 'script' var=value file(s)

详细文档

举例

awk '{ sub(/aaa/,"hhh"); print $0 }' index.js

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_sed_04


可以看出,确实把 aaa 改为 hhh 了,但是只是打印输出,没有修改源文件,那么如何改呢?使用 >

linux 中 > 就是把写入内容的意思,>> 是内容追加的意思,可以看这篇

awk '{ sub(/aaa/,"hhh"); print $0 > "index.js" }' index.js

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_perl_05


这样就可以正常替换了

perl

perl 是一种编程语言,linux 上自带了该语言。详细文档 Perl 借用了C、sed、awk、shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点。

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_运维_06

语法

  • -p 告诉Perl对后面添加的文件名参数进行遍历,大致和sed中的这段代码效果类似
  • -i 大致是用来读取文件时进行备份操作。
  • -e 告诉Perl后面跟上perl语句
  • -p和-i可以合在一起-pi,-p -e也可以何在一起,但是-i,-e不能合在一起写-ie。

示例

perl -pi -e 's|aaa|hhh|g' index.js

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_linux_07


替换并生成备份

perl -pi.source -e 's|aaa|hhh|g' index.js

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_linux_08

find ./ -name "*.js" | xargs perl -pi -e 's|aaa|hhh|g'

python 处理linux文件数据 替换部分内容 linux命令替换文件内容_sed_09

总结

  • sed – 当你需要对文件进行简单的文本转换。
  • awk – 当你只需要简单的格式化和汇总或转换数据。
  • perl – 几乎任何任务,但特别是当任务需要复杂的正则表达式时。
  • python – 对于可以使用Perl的相同任务。

sed 是一个编辑器(命令行)
awk 是一个文本处理工具(命令行)
shell、perl、python 是编程语言

以上的 / 和 | 都可以使用,例如 ‘s/aaa/hhh/g’,‘s|aaa|hhh|g’