Linux文本处理三剑客grep,sed,awk

文本处理三剑客

grep

grep 文本搜索,支持正则使用

-a --text  # 不要忽略二进制数据。
-A <显示行数>   --after-context=<显示行数>   # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset                           # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数>   --before-context=<显示行数>   # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count    # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> --directories=<动作>  # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式>   # 指定字符串作为查找文件内容的范本样式。
-E --extended-regexp             # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> --file=<规则文件>     # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F --fixed-regexp   # 将范本样式视为固定字符串的列表。
-G --basic-regexp   # 将范本样式视为普通的表示法来使用。
-h --no-filename    # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename  # 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i --ignore-case    # 忽略字符大小写的差别。
-l --file-with-matches   # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number         # 在显示符合范本样式的那一列之前,标示出该列的编号。
-P --perl-regexp         # PATTERN 是一个 Perl 正则表达式
-q --quiet或--silent     # 不显示任何信息。
-R/-r  --recursive       # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages  # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version      # 显示版本信息。   
-w --word-regexp  # 只显示全字符合的列。
-x --line-regexp  # 只显示全列符合的列。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。
-m <num> --max-count=<num> # 找到num行结果后停止查找,用来限制匹配行数

用法一:从文件中搜索关键字

grep [参数] [字符] [文件名]

在文件’/etc/passwd’中查找关键词"root”

root@xyh-server:~# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bas

在文件’/etc/passwd’中查找所有以m开头的用户

root@xyh-server:~# grep ^m /etc/passwd
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
mysql:x:116:126:MySQL Server,,,:/nonexistent:/bin/false

查询/etc/ssh/sshd_config文件中非注释以及非空行

root@xyh-server:~# grep -vE '^#|^$' /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp  /usr/lib/openssh/sftp-server
UseDNS no
AddressFamily inet
SyslogFacility AUTHPRIV
PermitRootLogin yes
PasswordAuthentication yes
-v (忽略大小写) 
-o (只显示查询到的内容)
root@xyh-server:~# grep -io "ROOT" /etc/passwd
root
root
root
 root@xyh-server:~# grep -i "ROOT" /etc/passwd
root:x:0:0:root:/root:/bin/bash

查询在/var/log目录下包含Oct字段的文件

-R 指定要查找的是目录而非文件
-l 显示查询到的文件
(base) root@xyh-server:~# grep Oct -Rl /var/log/* 
/var/log/apport.log.1
/var/log/journal/949ee72b23b94d4aa7e2f5f7612118d6/system@00062380c4a5214e-3eac93b98911eee1.journal~
/var/log/journal/949ee72b23b94d4aa7e2f5f7612118d6/system@000623ad408b2e26-adc973bbcea65022.journal~
/var/log/journal/949ee72b23b94d4aa7e2f5f7612118d6/system@fba0da60cfa14387a50a0b8a6ff53810-000000000001e8cc-0006254348057546.journal
/var/log/journal/949ee72b23b94d4aa7e2f5f7612118d6/system@fba0da60cfa14387a50a0b8a6ff53810-0000000000000001-000623ad408b9bcb.journal
/var/log/journal/949ee72b23b94d4aa7e2f5f7612118d6/system@fba0da60cfa14387a50a0b8a6ff53810-000000000000f811-000624765f2812a4.journal

用法二 结合管道符

查询nginx进程

root@xyh-server:~# ps -ef |grep nginx
root      157116       1  0  2024 ?        00:00:00 nginx: master process nginx
www-data 1202460  157116  0  2024 ?        00:00:00 nginx: worker process
www-data 1202461  157116  0  2024 ?        00:00:26 nginx: worker process
root     1706199 1705953  0 22:46 pts/0    00:00:00 grep --color=auto nginx

查询80端口的占用情况

root@xyh-server:~# netstat -tunlp|grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      157116/nginx: maste 

sed

sed 对文本数据按行进行编辑,可修改原文件内容

sed默认修改的是模式空间内的数据
(简单大白话,sed读取了一行文本数据,放入到内存里进行修改,修改的结果默认不会写入到文件中,只是在内存里修改,且打印让你看到修改的结果)

sed语法

sed [选项] [sed内置命令字符] [输入文件]

说明:
1.注意 sed 软件及后面选项,sed 命令和输入文件,每个元素之间都至少有一个空格

2.为了避免混淆,文本称呼sed为sed软件.sed-commands(sed命令)是sed软件内置的一些命令选项,为了和前面的 options(选项)区分,故称为sed命令.

3.sed-commands 既可以是单个sed 命令,也可以是多个sed命令组合.

4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云Apprentice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值