Linux三剑客与管道使用

本文介绍了Linux系统中管道的概念,以及如何利用正则表达式、grep、sed和awk进行文本处理。通过示例展示了grep的匹配、过滤功能,sed的行编辑操作,awk的按字段处理和自定义分隔符等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux三剑客与管道使用

在这里插入图片描述

管道

Linux提供管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边的命令的输入:
在这里插入图片描述

例:echo "hello1234" | grep 'hello'  

正则表达式

正则表达式就是记录文本规则的代码

常见的元字符:

代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白字符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束

常见的限定符:

代码/语法说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

正则演练>

- 找出所有的hi单词
   -\bhi\b
- hi单词后面有lucy单词
   -\bhi\b.*\blucy\b
- 以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字
  -0\d{2}-\d{8} 

grep

根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行

命令形式:grep[OPTIONS]PATTERN[FILE…]

  • -v显示不被pattern匹配到的行

  • -i忽略字符大小写

  • -n显示匹配的行号

  • -c统计匹配的行数

  • -o仅显示匹配到的字符串

  • -E使用ERE,相同于egrep 6.

    🌰查找文件内容包含root的行数
    grep -n root test.txt
    🌰查找文件内容不包含root的行
    grep -nv root test.txt
    🌰查找以s开头的行
    grep ^s test.txt
    🌰查找以n结尾的行
    grep n$ text.txt
    在这里插入图片描述

sed

sed是流编辑器,一次处理一行内容sed处理流程
命令形式:sed[-hn…][-e<script>][-f<script FILE>][FILE]

  • -h显示帮助
  • -n仅显示script处理后的结果
  • -e<script>以选项中指定的script来出来输入的文本文件
  • -f<script FILE>以选项中指定的script文件来处理输入的文本文件

常见的动作:

代码例子说明
ased -e ‘4 a newline’第4行后面新增一行newline
csed -e ‘2,5 c No 2-5 number’用c后面的内容取代2到5行的内容
dsed -e ‘2,5d’删除2到5行的内容
ised -e ‘2i newline’在第2行前面插入newline
psed -n ‘/root/p’打印匹配到root的内容
ssed -e ‘s/old/new/g’用new取代old的内容,/g代表全局

练习

  • 查看帮助
    • man sed
    • sed -h
  • 在第四行后添加新字符串
    • sed -e ‘4 a newline testfile’ test.txt
      在这里插入图片描述
  • 在第二行前加上newline
    • sed ‘2i drink tea’ test.txt
      在这里插入图片描述
  • 全局替换
    • sed -e 's/root/hello/g’test.txt
      在这里插入图片描述
  • 直接修改文件内容
    • sed -i ‘s/root/hello/g’ test.txt
      在这里插入图片描述

使用Mac操作的时候报错
sed: 1: “4 a newline”: command a expects \ followed by text

  • 解决方案1:调整mac下sed的用法,使其与Linux一致
    mac上安装gnu-sed
brew install gnu-sed
alias sed=gsed
  • 解决方案2:用法区别参考

awk

把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理
在这里插入图片描述
常用参数:

代码说明代码说明
FILENAMEawk浏览的文件名OFS输出域分隔符
BEGIN处理文本之前要执行的操作ORS输出记录分隔符
END处理文本之后要执行的操作RS控制记录分隔符
FS设置输入域分隔符,等价于命令行-F选项$0整条记录
NF浏览记录的域的个数(列数)$1表示当前行的第一个域…以此类推
NR已读的记录数(行数)

awk学习链接1
awk学习链接2

练习

  • 打印匹配到ll的第二行内容
    • awk ‘/ll/{print $2}’ test.txt - sed -h在这里插入图片描述
  • 打印第二行内容
    • awk ‘NR==2{print $0}’ test.txt在这里插入图片描述
  • 使用begin加入标题
    • awk ‘BEGIN{print “begin”,“BEGIN”}{print $1,$2}’ test.txt在这里插入图片描述
  • 自定义分割符
    • awk ‘BEGIN{RS=" "}{print $1}’ test.txt在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值