Shell字符串操作与sed和awk实战总结

 
Category: Linux-Shell

写在前面

来总结一下Shell编程中常用的文本处理工具, 用好这些工具, 什么辅助的GUI界面都不想用了.

当然了, 要想用好三剑客(grep, sed, awk), 首先得学一下文本处理的基本命令, 下面会以例子的形式给出, 方便大家加深理解.

测试环境: MacOS下multipass-Ubuntu22.04虚拟机

由于很多Shell工具在MacOS和Linux中存在区别, 这里还是以Linux为主了.

预备知识

I/O类命令

下面是一些输入输出类命令

echo

cat

tac

统计类命令

下面列出一些进行字符统计的命令

wc: 统计字符数

也可以统计行数

###

操作类命令

sort: 行排序

sort - sort lines of text files

uniq: 去重

uniq - report or omit repeated lines

tr: 操作字符串

tr - translate or delete characters

grep

sed

提取IP地址

❯ ifconfig en0 | sed -n '5p' | sed -e 's/^.*inet//g' -e 's/net.*$//g'
 192.168.0.103
❯ ifconfig en0 | sed -e '5s/^.*inet//' -e "5s/netmask.*$//p" -n
 192.168.0.103

awk命令

提取IP地址

❯ ifconfig en0 | awk 'NR==5{print $2}'
192.168.0.103

输入分隔符和输出分隔符的修改

echo {1..50}pyyu | xargs -n 5 > awk-test.txt
❯ cat awk-test.txt
1pyyu 2pyyu 3pyyu 4pyyu 5pyyu
6pyyu 7pyyu 8pyyu 9pyyu 10pyyu
11pyyu 12pyyu 13pyyu 14pyyu 15pyyu
16pyyu 17pyyu 18pyyu 19pyyu 20pyyu
21pyyu 22pyyu 23pyyu 24pyyu 25pyyu
26pyyu 27pyyu 28pyyu 29pyyu 30pyyu
31pyyu 32pyyu 33pyyu 34pyyu 35pyyu
36pyyu 37pyyu 38pyyu 39pyyu 40pyyu
41pyyu 42pyyu 43pyyu 44pyyu 45pyyu
46pyyu 47pyyu 48pyyu 49pyyu 50pyyu
❯ awk -F "py" -v OFS="----" '{print $1,$NF}' awk-test.txt
1----yu
6----yu
11----yu
16----yu
21----yu
26----yu
31----yu
36----yu
41----yu
46----yu
❯ awk  -v FS="py" -v OFS="----" '{print $1,$NF}' awk-test.txt
1----yu
6----yu
11----yu
16----yu
21----yu
26----yu
31----yu
36----yu
41----yu
46----yu
❯ awk  -v FS="py" -v OFS="----" -v RS=" " '{print $1,$NF}' awk-test.txt
1----yu
2----yu
3----yu
4----yu
5----yu
7----yu
8----yu
9----yu
10----yu
12----yu
13----yu
14----yu
15----yu
17----yu
18----yu
19----yu
20----yu
22----yu
23----yu
24----yu
25----yu
27----yu
28----yu
29----yu
30----yu
32----yu
33----yu
34----yu
35----yu
37----yu
38----yu
39----yu
40----yu
42----yu
43----yu
44----yu
45----yu
47----yu
48----yu
49----yu
50----yu
❯ awk  -v FS="py" -v OFS="----" -v ORS="py" '{print $1,$NF}' awk-test.txt
1----yupy6----yupy11----yupy16----yupy21----yupy26----yupy31----yupy36----yupy41----yupy46----yupy%