php 输入需要删除文本里的字符串_教你如何使用 awk 处理文本内容

8c9a7951e1534ec68adbdcb3e25a2b3a.png2272d5029be937198e601fe144b9220c.png

Awk是为高级文本处理而设计的非常强大的工具。它逐行搜索扫描文件,将输入的每行分割成字段,将输入行或字段与模式进行比较,并对匹配的结果执行操作。 本节将使用sub和gsub函数和awk命令来删除文件中的制表符和空格。我们将使用以下文本文件作为本文中所有示例的输入文件:
[root@localhost ~]# cat <> content.txt
出现大于号时将以下内容复制到终端,将文本内容保存到content.txt文件中。
        hitesh engineer sales 30000
jayesh director account 25000
vyom manager purchase 20000

bhavesh engineer sales 30000
 rajesh directory sales 40000
niraj clerk account 20000
jay peon purchase 23000
deep clerk sales 20000
EOF

1ec829767b325ec3ccb12379f2875a7f.png

删除文件中的所有空白行 可以使用awk的特殊变量 NF ,从文件中删除所有空白行。例如,删除文件content.txt中的所有空白行。
[root@localhost ~]# awk NF content.txt 

ef773c5288840f0fc4a7bf7310212cfd.png

删除每行开头或者末尾的空格和制表符 使用awk命令在文件开头找到一个或多个空格或制表符并删除。可以使用以下命令:
[root@localhost ~]# awk '{ sub(/^[ \t]+/, ""); print }' content.txt

37592cc2ecee155b8c41688f15d264d6.png

命令行中的意思是:使用sub函数找到开头是制表符和空格的行,并替换空格和制表符为空。注意:sub()函数替换只发生在第一次匹配的时候,也就是一行中有多个空格或多个制表符,只替换左面的第一个。 删除末尾的空格和制表符可以使用下面的命令:
[root@localhost ~]# awk '{ sub(/[ \t]+$/, ""); print }' content.txt
同时查询开头和末尾的空格和制表符,可以使用下面命令:
[root@localhost ~]# awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }' content.txt
gsub函数表示满足条件,替换所有的匹配字符。 倒序列出文件中的所有行 它记录数组中的所有行,并将它们以相反的顺序排列。使用以下命令:
[root@localhost ~]# awk '{ b[i++] = $0 } END { for (j=i-1; j>=0;) print b[j--] }' content.txt

4abca841139f05f17dc66807b4fc1a17.png

添加行号为每行内容 使用以下命令使用NF内置变量对非空行进行编号:
[root@localhost ~]# awk 'NF { $0=++a ": " $0 }; { print }' content.txt 

3ebab52c163a18aaa3425d38a7050a85.png

打印包含特定字符串的行数 使用以下命令来打印包含engineer的总行数:
[root@localhost ~]# awk '/engineer/{n++}; END {print n+0}'  content.txt

f08f4c79b2bc2e2459f1f8fb295c4e99.png

打印与指定字符串匹配的行 下面实例中,筛选出含有 engineer字符串的行:
[root@localhost ~]# awk '/engineer/' content.txt 

f6774ed1efa162de4fed268f8758663e.png

打印与指定字符串不匹配的行 下面实例中,打印不包含字符串 jayesh 的行:
[root@localhost ~]# awk '!/jayesh/' content.txt 

3d0fbe18bb2deaef92564025ce916e7d.png

替换字符串 实例一:将content.txt中的字符串“ engineer”替换为“ doctor”,用到gsub()函数:
[root@localhost ~]# awk '{gsub(/engineer/,"doctor")}{print}' content.txt 

473a2933268fcd6da83e760c6200a966.png

实例二:查找字符串“ jayesh”,“ hitesh”或“ bhavesh”,并将其替换为字符串“ mahesh”,运行以下命令:
[root@localhost ~]# awk '{gsub(/jayesh|hitesh|bhavesh/ , "mahesh"); print}' content.txt 

9b811838d707b3242c9bb8aadfb90ab4.png

配合df命令,显示磁盘空间 可以将awk命令与df一起使用,只显示设备名称和可用空间、使用率。
[root@localhost ~]# df -h | awk '{printf("%-24s \t %-6s \t %-4s \n",$1,$4,$5)}'

effdad03ebaf85404282317397572346.png

查看每个IP打开的连接数 如果认为服务器受到攻击,那么这种awk单行代码非常有用。它将显示服务器的打开连接列表,并按数量对它们进行排序。
[root@localhost ~]# netstat -ntu|awk '{print $5}'|cut -d: -f1|awk '/[0-9]/'|sort|uniq -c|sort -n

3f4f7e0cb2cbc27602b47f4ea8b5d6eb.png

总    结 我们通过实际示例了解如何使用一行awk命令执行日常任务。

良许个人微信

添加良许个人微信即送3套程序员必读资料

→ 精选技术资料共享

→ 高手如云交流社群

50e581ba68782781b0570c0d5fe9018b.png


本公众号全部博文已整理成一个目录,请在公众号里回复「 m 」获取!

推荐阅读:

中美日印程序员收入对比

Linux安装软件时90%的人会遇到这个报错,如何解决?

《最受欢迎的男友职业排行榜Top10》

5T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,单片机,树莓派,等等。在公众号内回复「1024」,即可免费获取!!

4c06e22c4732dd0d02a0cb3630939f57.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值