文本处理 awk/sed/grep

awk🍉

awk简介
◆名字来源于三个作者的名字简称
◆适用于需要按列处理的数据,主要用于文本内容的分析处理,也常用于处理数据,生成报告
awk基本用法
1、打印对应列
ifconfig | awk '{print $1,$2,$3}'获取1、2、3列的内容,默认每列按空格或者TAB键分割。

2、-F 参数
cat /etc/shadow | awk -F: '{print $1}'指定:为分隔字符来获取该文件的第1列的列值。

awk 'BEGIN{FS=":"}{print $1}' test.txt内建变量,指定 :为分隔字符。

awk -F'[ :]' '{print $1}' test.txt使用多个分割符,在[]内有一个空格和 : 字符,先使用空格作为分隔符,然后对分割结果再使用:进行分割。

3、-v 参数
awk -vb=3 '{print \(1,\)b}' test.txt设置变量,即可以任意给定变量的值,在选择要输出的列的值就可以设置为这个变量。

awk -vx=2 -vy=fl '{print \(1,\)x,$1y}' test.txt除设置数字型变量以外,还能够在某一列的列值末尾添加字符。

4、-f 参数
awk -f fl.awk test.txt使用文件中的awk参数来获取信息。

5、运算符
awk '$1>3' test.txt列出第一列值大于3的行。

awk '$1==3' test.txt显示第一列值等于3的行。

awk '$1==3 {print $1,$3}’ test.txt显示第一列值等于3的所在行的第一列和第三列的值。

awk '$1>3 && $4=="aaaaaa" {print $1,$2,$3,$4}' test.txt显示第一列大于3且第四列的列值等于“aaaaaa”的所在行的第1,2,3,4列的列值。

6、打印抬头文
awk -F: 'BEGIN {print "---------fulin_test-----------"} {print $1}' test.txt

sed🍓

sed简介
◆stream editor
◆根据定位到的数据行修改数据,主要用于文本内容的编辑,默认只处理模式空间,不改变原数据
sed基本用法
1、-n 参数
1.1显示单行
sed -n '4p' test.txt显示文件的第4行。

1.2显示行范围
sed -n '3,6p' test.txt显示文件的3至6行。

1.3显示关键字所在行
sed -n '/aaaa/'p test.txt显示包含关键字的所有行。

1.4 显示整个文件
sed -n '1,\(p' test.txt显示整个文件,其中\)p代表最后一行。

sed -n '/$/'p test.txt由于\(本身对sed代表一种含意(表示最后一行),而若需要过滤文档本身\)字符,要让\(字符失去意义就要将用\)表示$字符本身.

1.5正则表达式
sed -n '/.*fl/'p test.txt使用正则表达式:’. ‘ ‘’ ‘ .fl’等。

2、模式/pattern/= 显示行号
sed '/fl/=' test.txt使用模式/pattern/=显示文件所有内容及关键字所在行的行号。

sed -n '/fl/=' test.txt在模式/pattern/=的基础上添加-n参数表示仅显示关键字所在行的行号。

3、-e参数
sed -n -e'/aaaaaa/=' -e '/fl/=' -e'/abs/=' test.txt-e参数能够支持多个模式/pattern/=。

sed -n -e'/ssaa/'p -e'/bkha/'p test.txt-e参数也能够支持多个’/pattern/’p模式。

4、替换匹配行的关键字
sed '2s/a/A/g' test.txt将文件的第2行的所有 a 字符全部替换为A字符。(2s代表第二行、/a/A/匹配第2行的a字符并将a替换为A,g代表的是全局)。

但是这种关键字的替换并不会修改源文件,仅是在命令执行后临时性的显示一次。

5、-i参数
sed -i '4s/a/A/g' test.txt-i直接修改文件内容 ,替换修改会保存到源文件中。 4s指的是进行第四行替换, g代指的全局替换 将a替换成A。并保存文件。

6、-i.bak参数
sed -i.bak '4d' test.txt删除源文件的第4行,并且备份一份未被修改的源文件‘.bak’。

7、sed应用实例
7.1 实用性:达到取任何一个字符
ifconfig | sed -n '2p' |awk -F: '{print $2}'|awk '{print $1}'|awk -F. '{print $2}'|awk -F1 '{print $2}'|awk -F8 '{print $1}'

7.2 截取linux所有网卡及网卡的MAC地址
ifconfig | sed -n -e '1p' -e '10p' |awk '{print $1,"\t|\t"$5}'

7.3 截取linux所有网卡的IP地址及其子网掩码
ifconfig | sed -n -e'2p' -e'11p' | awk '{print $2}'|awk -F: '{print \(2}'|grep -v '^\)'

grep🍒

grep简介
◆global regular expression print
◆基于正则表达式查找满足条件的行,主要用于文本内容查找,支持正则表达式
grep基本用法
1、 在文件中查找关键字
grep "fl" /etc/passwd搜索关键字并打印出关键字所在的行。

1.1 -A 参数
grep -A 10 "fl" /etc/passwd搜索关键字并打印出关键字所在的行以及关键字以下十行。

1.2 -B 参数
grep -B 10 "fl" /etc/passwd搜索关键字并打印出关键字所在的行以及关键字以上十行。

1.3 -C 参数
grep -C 10 "fl" /etc/passwd搜索关键字并打印出关键字所在的行以及关键字以上下十行。

2、 在多个文件中查找模式
grep "fl" /etc/passwd /etc/shadow /etc/group /etc/gshadow

3、-l 参数
作用:列出包含关键字的文件名
grep -l "fl" /etc/passwd test.txt a.txt /etc/shadow /etc/group /etc/gshadow

4、-n 参数
作用:列出关键字所在的行号及行的内容
grep -n "fl" /etc/passwd

5、-v 参数
作用:打印出不包含关键字所有的行
grep -v "defaults" /etc/fstab

6、 ^ 符号
作用:输出以某个关键字开头的所有行
grep "^UUID" /etc/fstab

7、 $ 符号
作用:输出以某个关键字结尾的所有行
grep "bash$" /etc/passwd

过滤注释和空行:grep -v "#" test.txt |grep -v "^\("其中 “^\)” 代表空行

8、-r 参数
作用:递归查找
grep -r -n "aaaaaa" .能把一个目录中只要是包含关键字的所有文件及所在的行的行号都打印出来。

9、-i 参数
作用:忽略大小写
grep -r -i "aaaaaa" .

10、-e 参数
作用:多关键字查找
grep -e "aaaaa" -e "bbbb" test.txt

查看文件中生效的配置:grep -v -e "#" -e "^$" test.txt

11、-f 参数
作用:以指定的文件里面的匹配模式去搜索
grep -f tmp.txt /etc/passwd

12、-c 参数
作用:显示匹配关键字的行数
grep -c "aaaaa" test.txt

grep结合正则表达式
1、^
作用:锚定行首
grep ^fl /etc/passwd

2、\( 作用:锚定行尾 grep bash\) /etc/passwd

3、.
作用:匹配为非换行符的任意字符
grep "f....l" test.txt当.字符位于两个指定指定的关键字的中间时,一个. 字符匹配为一个非换行符的任意字符。

grep "f." test.txt当.字符位于末尾时则匹配为任意多个非换行符的字符。

4、
作用:匹配零个或多个先前字符
grep "fu*" test.txt列出匹配0个或多个关键字所在行。

5、[]
作用:匹配一个指定范围内的字符
grep [ahb] test.txt列出含有指定范围内的1个或多个关键字的所在行。

6、[^]
作用:匹配不在指定范围内的字符
grep [^fabc] test.txt列出除了所有字符都是指定范围内的1个或多个关键字的所在行。

7、过滤有数字的行
grep -v [0-9] test.txt

8、打印出有数字的行
grep [0-9] test.txt

9、打印出有字符的行
grep [a-zA-Z] test.txt

9.1 打印出小写字母的行
grep [a-z] test.txt

9.2 打印出大写字母的行
grep [A-Z] test.txt

10、\关键字
作用:打印\关键字标记匹配字符
grep \aaaaa test.txt列出含有关键字的所在行。(^锚定行的开始 $锚定行的结束)。

11、<
作用:锚定单词开始行
grep "<fl" test.txt列出以关键字开头的字符串所在行。

12、>
作用:锚定单词结束行
grep "fl>" test.txt列出以关键字结尾的字符串所在行。

13、x{m}
作用:重复连续字符x,m次数
grep "a{4}" test.txt列出文件中存在4个及以上关键字a的所在行。

14、x{m,n}
作用:重复连续字符x,m-n次数
grep "a{7,9}" test.txt列出文件中存在7个到9个连续关键字a的所在行。

posted @ 2021-03-30 20:02  HiRose  阅读(100)  评论(0编辑  收藏  举报