文本处理三剑客grep,awk,sed-读书笔记(十四)

文本处理三剑客{

1.内容过滤器 => grep

2.文本分析器 => awk

3.行文本处理器 => sed

}

grep内容过滤器

grep命令是Linux系统中一个非常强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep命令的基本语法如下:

grep [选项] PATTERN [文件名]

其中,PATTERN表示要搜索的模式,可以是字符串、正则表达式或者单个字符;文件名是要搜索的文件,如果不指定文件名,则从标准输入读取数据。

grep命令的主要选项有:

  • -i:忽略大小写
  • -v:显示不包含匹配文本的所有行(反向匹配)
  • -n:显示匹配行的行号
  • -c:显示匹配行的数量
  • -l:显示包含匹配行的文件名
  • -r:递归搜索子目录中的文件
  • -E:将模式视为扩展正则表达式
  • -F:将模式视为固定字符串,而非正则表达式
  • -w:匹配整个单词,而非字符串的一部分
  • -A num:显示匹配行及其后num行
  • -B num:显示匹配行及其前num行
  • -C num:显示匹配行及其前后各num行

例子1:在文件file.txt中查找包含"hello"的行

grep "hello" file.txt

例子2:在文件file.txt中查找包含"hello"或"world"的行,忽略大小写

grep -i "hello\|world" file.txt

awk文本分析器

awk是一种在Linux系统中处理文本文件的语言,被誉为文本分析工具中的“三剑客之首”,其它两把剑分别是grep和sed。它逐行读取文本,并以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并根据模式或者条件执行编辑命令。

awk的基本语法格式是 awk 'pattern {action}' filename,其中pattern表示AWK在数据中查找的内容,而action是找到匹配内容时所要执行的一系列命令。

例如,我们有一个名为students.txt的文件,内容如下:

Tom 85 90 92 Jerry 88 92 96 Alice 78 80 85

如果我们想要计算每个学生的平均分,可以使用以下命令:

awk '{sum=($1+$2+$3)/3; print $0, sum}' students.txt

这条命令首先通过{sum=($1+$2+$3)/3;}计算每个学生的总分数,然后通过print $0, sum打印每行和总分。

另一个例子,如果我们想要查看一个文件的行数,可以使用以下命令:

awk 'END { print NR }' example.txt

这个命令通过内置变量NR(记录数)来调用相关信息,打印出文件的行数。

这条Linux命令使用了两个常用的文本处理工具:cat 和 awk。下面是命令的详细解释:

  1. cat test.txt

:cat 是 "concatenate" 的缩写,通常用于显示文件内容。这里它将 test.txt 文件的内容输出到标准输出(通常是你的终端屏幕)。

  1. |

:这个符号是管道操作符,它允许你将前一个命令的输出作为下一个命令的输入。

  1. awk '/^name/{name=$0; next;}{print name "-" $0}'

:awk 是一个强大的文本处理工具,能够执行复杂的文本操作。这个 awk 命令做了以下几件事:

综上所述,这条命令的作用是:从 test.txt 文件中找到以 "name" 开头的行,将其内容存储在一个变量中,并为该文件中的每一行打印出这个变量的内容,后面跟着一个短横线和当前行的内容。如果文件中有多个以 "name" 开头的行,只有第一次出现的 "name" 行的内容会被使用。

例如,如果 test.txt 文件的内容是:

name John Doe age 30 location New York

运行这条命令后,输出将是:

name John Doe - age 30 name John Doe - location New York

这样,无论文件中有多少行,以 "name" 开头的那一行的内容都会被重复打印,直到遇到文件的末尾。

sed行文本处理器

sed 是一个流编辑器,用于对文本数据进行处理。它一次读取一行输入,然后根据指定的指令对这行数据进行处理,并将结果输出。sed 命令非常适合用于自动化文本处理任务,如查找、替换、删除文本行等。

基本语法:

sed [选项]... [指令]...

主要参数:

  • -n 或 --quiet 或 --silent:仅打印 sed 指令处理后的行,不打印模式空间的内容。
  • -e:添加一个指令到命令的列表中。
  • -f:从文件中读取 sed 指令。
  • -i:直接修改文件,而不是输出到标准输出。

常用指令:

  • s:替换指令,格式为 s/regexp/replacement/flags。
    • regexp:正则表达式,用于匹配要替换的文本。
    • replacement:用于替换匹配到的文本的字符串。
    • flags:可选标志,如 g 表示全局替换。

示例:

  1. 替换文本中的字符串

假设我们有一个文本文件 example.txt,内容如下:

hello world hello universe hello galaxy

使用 sed 将所有的 "hello" 替换为 "hi":

sed 's/hello/hi/' example.txt

输出:

hi world hi universe hi galaxy

如果要直接修改文件,可以使用 -i 选项:

sed -i 's/hello/hi/' example.txt

  1. 删除匹配的行:

继续以 example.txt 为例,如果要删除所有包含 "universe" 的行:

sed '/universe/d' example.txt

输出:

hi world hi galaxy

同样,使用 -i 选项可以直接修改文件:

sed -i '/universe/d' example.txt

请注意,sed 的功能非常强大,这里只是介绍了一些基本的用法。根据具体的需求,sed 可以执行更复杂的文本处理任务。

g代表将所有的warning替换为Warning,如果不加g的话就是将每一行的第一个warning替换为Warning

如果不加 -i 参数 就不会对源文件进行修改文本只是进行终端的输出

  • 38
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值