@文本处理之三剑客总结grep-sed-awk
1|0
1|0文章目录
1|0三剑客的扩展与总结
-
grep #过滤 给过滤出来的内容加上颜色
选项:
-n #给过滤出来的内容加上此行所在文件的行号 -i #忽略大小写 -c #统计的是行数 包含过滤字符串的行数 -v #排除 删除 取反 -o #只显示过滤出来的内容 -w #精确匹配 只匹配你要过滤的字符串,而不是过滤包含此字符串的字符串 -r #递归过滤 过滤多个文件 针对目录操作 -A #匹配过滤出来的内容向下多少行 后面加正整数 -B #匹配过滤出来的内容向上多少行 -C #匹配过滤出来的内容各向上向下多少行 -E #支持扩展正则使用 === egrep ^ #以什么开头 $ #以什么为结尾 ^$ #空行 排除存在空格或者tab键的空行 . #匹配除换行符以外的任意一个字符 * #匹配前面的字符出现0次或者0次以上 .* #所有 | #或者 扩展正则
``` `
-
sed #擅长替换 增删改查 后向引用
选项:
-n #取消默认输出 -r #支持扩展正则 -i #真正的改变文件内容 -e #允许多项编辑 了解 内部命令:
p #打印 d #删除 排除 取反 s #替换 g #全局 i #忽略大小写 a #追加 i #插入 \n #换行符 \t #tab键 = #显示行号
后向引用:
[root@qls ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 19648 bytes 2074525 (1.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13896 bytes 1420434 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 | sed -n '3p' | sed -r 's#(.*6 )(.*)( pr.*)#\2#g'
fe80::3310:9d15:9ee4:43e8
[root@qls ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 19930 bytes 2100423 (2.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14078 bytes 1441164 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 | sed -n '2p'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#(^.*et )(.*)( n.*$)#\2#g'
10.0.0.100
[root@qls ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 | sed -n '3p'|sed -r 's#(^.*t )(.*)(/.*)#\2#g'
10.0.0.100
灵活 思路 方法
[root@qls ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67125348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:net_conf_t:s0
Access: 2020-07-14 17:30:04.678582732 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-06 02:13:36.028996182 +0800
Birth: -
[root@qls ~]# stat /etc/hosts | sed -nr '4s#.*: \((.*)/.*#\1#gp'
0
[root@qls ~]# stat /etc/hosts | sed -nr '4s#.*: \((.*)/-r.*#\1#gp'
0644
[root@qls ~]# stat /etc/hosts | sed -nr '4s#.*\((.*)/-r.*#\1#gp'
0644
多种方法 多种选择
-
awk #擅长取列
选项:
-F #指定分隔符 默认的为空白字符为分隔符 FS -v #指定内部变量 ! #取反 排除 内部变量:
FS #指定输入分隔符 OFS #指定输出分隔符 NR #行号 NF #最后一列 $NF #显示最后一列 $0 #完整的一行内容 $n #n数字 指定取出的某一列
了解
1. 排除空行 存在空格和tab键的空行
[root@qls ~]# cat sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::
[root@qls ~]# grep -v '^$' sshd_config
[root@qls ~]# sed '/^$/d' sshd_config
[root@qls ~]# awk '!/^$/' sshd_config
# -P 支持tab键
[root@qls ~]# grep -Pv '^[ \t]*$' sshd_config
[root@qls ~]# sed '/^[ \t]*$/d' sshd_config
[root@qls ~]# awk '!/^[ \t]*$/' sshd_config
# \s 空白字符
[root@qls ~]# grep -v '^\s*$' sshd_config
[root@qls ~]# sed '/^\s*$/d' sshd_config
[root@qls ~]# awk '!/^\s*$/' sshd_config
``
2. 排除空行和注释行 #号开头的
[root@qls ~]# grep -Ev '^$|^#' sshd_config
[root@qls ~]# grep -Ev '^\s*$|^#' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# sed -r '/^\s*$|^#/d' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# sed -r '/^[ \t]*$|^#/d' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# awk '!/^[ \t]*$|^#/' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@qls ~]# awk '!/^\s*$|^#/' sshd_config
Port 22
ListenAddress 0.0.0.0
```
```
3. 将/etc/passwd文件中的第一列和第七列位置进行调换 awk 等值替换
[root@qls ~]# awk -F '[:]' '{a=$1;$1=$NF;$NF=a;print}' passwd | tr ' ' ':'
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
[root@qls ~]# awk -F '[:]' -vOFS=":" '{a=$1;$1=$NF;$NF=a;print}' passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
__EOF__
本文作者:ଲ小何才露煎煎饺
本文链接:https://www.cnblogs.com/zeny/p/15121642.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/zeny/p/15121642.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:ଲ小何才露煎煎饺,转载请注明原文链接:https://www.cnblogs.com/zeny/p/15121642.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报