[CentOS 7系列]grep/sed/awk高级扩展

在上一帖的实战中,我们用到了grep的"-Po"的用法。首先,我们来看看这几个参数的含义:

-P,--perl-regexp
InterpretPATTERNasaPerlregularexpression.Thisishighly
experimentalandgrep-Pmaywarnofunimplementedfeatures.

-o,--only-matching
Printonlythematched(non-empty)partsofamatchingline,witheachsuchpartonaseparateoutputline.

“-P”表示采用的模式是Perl正则表达式的模式,“-o”表示只需要匹配到的内容。

像这种参数在平时是很少使用的,需要经常翻看命令手册和实例,熟悉这些用法,以备不时之需。


下面整理了几个非主流实例,通过实例熟悉下sed和awk的扩展用法。


sed

1、打印某行到某行之间的内容

[root@server01test2]#sed-n'/lp/,/shutdown/'ppasswd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

2、转换大小写

使用\u表示大写,\l表示小写

�把每个单词的第一个小写字母变大写:

[root@server01test2]#sed's/\b[a-z]/\u&/g'passwd
Root:X:0:0:Root:/Root:/Bin/Bash
Bin:X:1:1:Bin:/Bin:/Sbin/Nologin
Daemon:X:2:2:Daemon:/Sbin:/Sbin/Nologin
......

�把所有小写变大写:

[root@server01test2]#sed's/[a-z]/\u&/g'passwd
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
......

�大写变小写:

[root@server01test2]#sed's/[A-Z]/\l&/g'/etc/logrotate.conf
......
#rpmpackagesdroplogrotationinformationintothisdirectory
include/etc/logrotate.d
......

3、在某一行最后添加字符串

[root@server01test2]#sed's/\(^shutdown.*\)/\1123abc/'passwd|grepshutdown
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown123abc

4、删除某行到最后一行

[root@server01test2]#sed'/shutdown/{p;:a;N;$!ba;d}'passwd
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

定义一个标签a,匹配shutdown这个关键词,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。

5、打印某行到某行含某个字符串的行

[root@server01test2]#sed-n'1,10{/nologin/p}'passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin


awk

1、使用外部shell变量

[root@server01test2]#A=100
[root@server01test2]#echo"ABCD"|awk-vGETA=$A'{printGETA}'
100

2、合并一个文件

�第一列相同的行合并到同一行中:

[root@server01test2]#cata.txt
1a1
2a2
3a3
4a4
[root@server01test2]#catb.txt
1b1
2b2
3b3
4b4
[root@server01test2]#awk'NR==FNR{a[$1]=$2}NR>FNR{print$0,a[$1]}'a.txtb.txt
1b1a1
2b2a2
3b3a3
4b4a4

NR表示读取的行数,FNR表示读取的当前行数。

所以其实NR==FNR,就表示读取b.txt的时候。 同理NR>FNR表示读取a.txt的时候。

数组a其实就相当于一个map。

3、把一个文件多行连接成一行

[root@server01test2]#a=`cata.txt`;echo$a
1a12a23a34a4
[root@server01test2]#awk'{printf("%s",$0)}'a.txt
1a12a23a34a4
[root@server01test2]#cata.txt|xargs
1a12a23a34a4

4、gsub函数

[root@server01test2]#grep'root'passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@server01test2]#awk'gsub(/root/,"abc")'passwd
abc:x:0:0:abc:/abc:/bin/bash
operator:x:11:0:operator:/abc:/sbin/nologin

5、生成特殊结构文件

�用awk编写生成以下结构文件的程序。( 最后列使用现在的时间,时间格式为YYYYMMDDHHMISS)各列的值应如下所示,每增加一行便加1,共500万行。

1,1,0000000001,2005100110101
2,2,0000000002,2005100110101

[root@server01test2]#awk'BEGIN{for(i=1;i<=5000000;i++)printf("%d,%d,%010d,%d\n",i,strftime("%Y%m%d%H%M"))}'
1,201706282126
2,201706282126
3,3,0000000003,201706282126
4,4,0000000004,201706282126
5,5,0000000005,201706282126
6,6,0000000006,201706282126
7,7,0000000007,201706282126
8,8,0000000008,201706282126
9,9,0000000009,201706282126
10,10,0000000010,201706282126
......

6、用print打印单引号

[root@server01test2]#awk'{print"'"'"'"$1}'a.txt
'1
'2
'3
'4

在awk中使用脱义字符\是起不到作用的,如果想打印特殊字符,只能使用'""'这样的组合才可以。

这里自左至右为单引号 双引号 双引号 单引号。其中两个单引号为一对,两个双引号为一对。想脱义$那就是'"$"' 脱义单引号那就是 '"'"'。

7、提取eth0的IP信息

[root@server01test2]#ifconfigens33
ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500
inet192.168.137.100netmask255.255.255.0broadcast192.168.137.255
inet6fe80::c1d7:5856:9856:2bb8prefixlen64scopeid0x20<link>
ether00:0c:29:0c:4d:a8txqueuelen1000(Ethernet)
RXpackets160327bytes130100204(124.0MiB)
RXerrors0dropped0overruns0frame0
TXpackets88376bytes52770231(50.3MiB)
TXerrors0dropped0overruns0carrier0collisions0

[root@server01test2]#ifconfigens33|awk-F"[^0-9.]+"'NR==2{print$2,$3,$4}'
192.168.137.100255.255.255.0192.168.137.255

8、合并两个文件

[root@server01test2]#pastea.txtb.txt
1a11b1
2a22b2
3a33b3
4a44b4
[root@server01test2]#paste-d'+'a.txtb.txt
1a1+1b1
2a2+2b2
3a3+3b3
4a4+4b4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux下开机自启: 在/etc/init.d目录下新建文件elasticsearch 并敲入shell脚本: 注意, 前两行必须填写,且要注释掉。 第一行为shell前行代码,目的告诉系统使用shell。 第二行分别代表运行级别、启动优先权、关闭优先权,且后面添加开机服务会用到。 shell脚本
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod +x /etc/rc.d/rc.local 2、赋予脚本可执行权限假设/usr/local/script/autostart.sh是你的脚本路径,给予执行权限 chmod +x /usr
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。 通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。 查询当前目录总大小可以使用d
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一但shell关闭网站也就关闭了,所以要配置守护进程, 用的是Supervisor,本文主要记录配置的过程和过程遇到的问题 安装Supervisor&#160;1 yum install python-setuptools
设置时区(CentOS 7) 先执行命令timedatectl status|grep &#39;Time zone&#39;查看当前时区,如果不是时区(Asia/Shanghai),则需要先设置为中国时区,否则时区不同会存在时差。 #已经是Asia/Shanghai,则无需设置 [root@xia
vim&#160;/etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=&quot;static&quot; ONBOOT=yes IPADDR=192.168.8.106 NETMASK=255.255.252.0 GATEWAY=192.168.
一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包 [root@localhost local
第一步 On CentOS/RHEL 6.*: $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm On CentOS/RHEL 7: $
/// &lt;summary&gt; /// 取小写文件名后缀 /// &lt;/summary&gt; /// &lt;param name=&quot;name&quot;&gt;文件名&lt;/param&gt; /// &lt;returns&gt;返回小写后缀,不带“.”&lt;/ret
which nohup .bash_profile中并source加载 如果没有就安装吧 yum provides */nohup nohup npm run start &amp; nohup ./kibana &amp;
1.1 MySQL安装 1.1.1 下载wget命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 1.1.3 安装My
重启 reboot shutdown -r now init 6 关闭 init 0 shutdown -h now shutdown -h 20:25 #8点25关机查看内存 free CPU利用率 top 日期 date 设置时间 date 033017002015 #月日时间年 日历 cal
1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 :
1 下载并安装MySQL官方的&#160;Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面的命令就直接下载了安装用的Yum Repository,大概
CentOS6.x CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。 一、相关命令 通过initctl help可以查看相关命令 [root@localhost ~]# initctl help Job commands: start Start job. sto
1、使用命令:df -lk 找到已满磁盘 2、使用命令:du --max-depth=1 -h 查找大文件,删除
ifconfig:查看网卡信息 网卡配置文件位置: /etc/sysconfig/network-scripts/文件夹 nmtui:配置网卡 netstat -tlunp:查看端口信息 端口信息存储位置: /etc/services文件 route:查看路由信息 wget:下载网路文件,例如 wg
ps -ef:查看所有进程,&#160;ps -ef |grap firewalld 查看与firewalld相关的进程 which :查看进程:which firewalld kill 进程id:杀掉进程 kill 640,强制杀:kill -9 640 man:查看帮助,例如 man ps 查看
useradd:添加用户 useradd abc,默认添加一个abc组 vipw:查看系统中用户 groupadd:添加组groupadd ccna vigr:查看系统中的组 gpasswd:将用户abc添加到ccna组 gpasswd -a abc ccna groups abc:查看用户abc属