linux三剑客
grep 过滤查找内容。筛子
sed 取行,替换,删除,追加
awk 取列
1.grep
2.sed
Sed是操作、过滤和转换文本内容的强大工具。
常用功能有对文件实现快速增删改查(增加、删除、修改、查询),
其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。
语法:
1 | sed [选项] [ sed 内置命令字符] [文件] |
选项:
1 2 3 4 | -n 取消默认 sed 的输出,常与 sed 内置命令的p连用 -i 直接修改文件内容,而不是输出到终端。(-i 的 sed 后面是要有文件的) -e 多次 sed 操作 -r 不需要转义(使用反向引用需要) |
内置命令符:
1 2 3 4 5 6 7 8 | sed 的内置命令字符说明 s 替换 g 全局global p 打印print 两种情况 1.打印指定行 2.与-n配合 打印修改行 d 删除delete a 添加 默认是指定行末 i 插入 指定行前 // 匹配 |
说明:
1.关于-n 默认情况下sed会输出所有内容
2. s# # #g中 只有前两个##可以使用正则
练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 环境: [root@oldboyedu ~ /test ] # cat oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! our site is http: //www .oldboyedu.com my qq num is 49000448. 问题1:输出oldboy.txt的第2-3行内容※。 [root@oldboyedu ~ /test ] # sed -n '2,3p' oldgirl.txt I like badminton ball ,billiard ball and chinese chess! our site is http: //www .oldboyedu.com [root@oldboyedu ~ /test ] # head -3 oldgirl.txt |tail -2 I like badminton ball ,billiard ball and chinese chess! our site is http: //www .oldboyedu.com 问题2:过滤出含有oldboy字符串的行※。 [root@oldboyedu ~ /test ] # sed -n '/oldboy/p' oldgirl.txt I am oldboy teacher! our site is http: //www .oldboyedu.com [root@oldboyedu ~ /test ] # grep oldboy oldgirl.txt I am oldboy teacher! our site is http: //www .oldboyedu.com 问题3:删除含有oldboy字符串的行※。 [root@oldboyedu ~ /test ] # sed '/oldboy/d' oldgirl.txt I like badminton ball ,billiard ball and chinese chess! my qq num is 49000448. [root@oldboyedu ~ /test ] # grep -v "oldboy" oldgirl.txt I like badminton ball ,billiard ball and chinese chess! my qq num is 49000448. 问题4:将文件中的oldboy字符串全部替换为oldgirl※。 [root@oldboyedu ~ /test ] # sed 's#oldboy#oldgirl#g' oldgirl.txt I am oldgirl teacher! I like badminton ball ,billiard ball and chinese chess! our site is http: //www .oldgirledu.com my qq num is 49000448. vim替换: 问题5:将文件中的oldboy字符串全部替换为oldgirl,同时将QQ号码49000448改为31333741。 [root@oldboyedu ~ /test ] # sed -e 's#oldboy#oldgirl#2' -e 's#49000448#31333741#g' oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! our site is http: //www .oldboyedu.com my qq num is 31333741. 问题6:在oldboy.txt文件的第2行后追加文本。 [root@oldboyedu ~ /test ] # sed '2a I teacher linux.' oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! I teacher linux. our site is http: //www .oldboyedu.com my qq num is 49000448. [root@oldboyedu ~ /test ] # cat oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! our site is http: //www .oldboyedu.com my qq num is 49000448. [root@oldboyedu ~ /test ] # sed -i '2a I teacher linux.' oldgirl.txt [root@oldboyedu ~ /test ] # cat oldgirl.txt I am oldboy teacher! I like badminton ball ,billiard ball and chinese chess! I teacher linux. our site is http: //www .oldboyedu.com my qq num is 49000448. [root@oldboyedu ~ /test ] # sed '2i I teacher linux.i' oldgirl.txt I am oldboy teacher! I teacher linux.i I like badminton ball ,billiard ball and chinese chess! I teacher linux. our site is http: //www .oldboyedu.com my qq num is 49000448. |
3.awk
语法:
1 2 | awk [option] 'pattern{action}' file ... awk [参数] '条件{动作}' 文件 ... |
参数:
1 2 | -F 指定字段分隔符 - v * |
常用变量:
1 2 3 4 5 6 | $0 打印所有 $n 打印列 NF 列 NF==1 $NF 最后一列 $(NF-n) 倒数n列 NR 记录行号 |
说明:
默认情况下 分隔符为空格 相当于[ ]+
练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | test .txt文件内容如下 root:x:0:0:root: /root : /bin/bash bin:x:1:1:bin: /bin : /sbin/nologin daemon:x:2:2:daemon: /sbin : /sbin/nologin adm:x:3:4:adm: /var/adm : /sbin/nologin lp:x:4:7:lp: /var/spool/lpd : /sbin/nologin 问题1:取 test .txt文件的第2行到第3行的内容。 [root@oldboyedu ~] # awk 'NR>1&&NR<4' oldboyedu.txt bin:x:1:1:bin: /bin : /sbin/nologin daemon:x:2:2:daemon: /sbin : /sbin/nologin [root@oldboyedu ~] # awk 'NR==2,NR==3' oldboyedu.txt bin:x:1:1:bin: /bin : /sbin/nologin daemon:x:2:2:daemon: /sbin : /sbin/nologin 问题2:过滤出含有root字符串的行※。 [root@oldboyedu ~] # awk '/root/' oldboyedu.txt root:x:0:0:root: /root : /bin/bash [root@oldboyedu ~] # awk /root/ oldboyedu.txt root:x:0:0:root: /root : /bin/bash [root@oldboyedu ~] # [root@oldboyedu ~] # awk "/root/" oldboyedu.txt root:x:0:0:root: /root : /bin/bash ##建议统一三剑客都用'' 问题3:删除含有root字符串的行※。 [root@oldboyedu ~] # awk '/^[^r]/' oldboyedu.txt bin:x:1:1:bin: /bin : /sbin/nologin daemon:x:2:2:daemon: /sbin : /sbin/nologin adm:x:3:4:adm: /var/adm : /sbin/nologin lp:x:4:7:lp: /var/spool/lpd : /sbin/nologin [^r] 非r ^[^r] 以非r字符卡头 问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。 [root@oldboyedu ~] # awk -F ":" '{print NR,$1,$3,$NF}' oldboyedu.txt 1 root 0 /bin/bash 2 bin 1 /sbin/nologin 3 daemon 2 /sbin/nologin 4 adm 3 /sbin/nologin 5 lp 4 /sbin/nologin 问题5:取出Linux中执行 ifconfig eth0后对应的IP地址(只能输出IP地址)。 [root@oldboyedu ~] # ifconfig eth0|awk 'NR==2{print $2}' 10.0.0.201 C6 [root@oldboy ~] # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:D0:87:20 inet addr:10.0.0.202 Bcast:10.0.0.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fed0:8720 /64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:243 errors:0 dropped:0 overruns:0 frame:0 TX packets:67 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:20674 (20.1 KiB) TX bytes:8706 (8.5 KiB) [root@oldboy ~] # ifconfig eth0|awk 'NR==2{print $2}' addr:10.0.0.202 [root@oldboy ~] # ifconfig eth0|awk 'NR==2{print $2}'|awk -F ":" '{print $2}' 10.0.0.202 [root@oldboy ~] # ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}' 10.0.0.202 问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出 awk -F ":" '$1~/root/ {print $NF}' test .txt |
关于~
~:匹配
尾
shell中补充awk剩余用法
2020.3.30 goose
__EOF__

本文作者:红烧鹅
本文链接:https://www.cnblogs.com/hsgoose/p/12884290.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/hsgoose/p/12884290.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!