Akemi

高效使用Linux-文本处理

2025/02/24

剪切文本

主要是四剑客、和一些零碎命令比如yes date等

四剑客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
1.用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)
awk {print} test.txt

2.查找所有包含 ‘bash’ 的行
awk '/bash/ {print}' test.txt

3 .用 ‘:’ 作为分隔符,查找第三段等于0的行
awk -F ':' '$3 == 0 {print}' test.txt

4.用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)
awk -F ':' '$1 == "root" {print}' test.txt | sed 's/root/toor/g'

5.用 ‘:’ 作为分隔符,打印最后一段
awk -F ':' {print $NF} test.txt

redis 文本
work 16067 /data/svr/redis/bin/redis-server*:6403
work 16067 /data/svr/redis/bin/redis-server*:6403
work 16067 /data/svr/redis/bin/redis-server*:6403
work 16067 /data/svr/redis/bin/redis-server*:6403

6
如何打印第二列pid 和最后一列端口打印出来 ,请给出命令
awk -F "[ :]+" {print $2,$4}

7 linux系统中如何获取 pid 9257的进程号监听的端口是什么 给出命令
ss -tunlp | grep 958 | awk -F "[ :]+" '{print $6}'

8 .查出实时 哪个IP地址连接最多 哪个ip 访问大于 1000次 截取出来
ss -tn state established | awk 'NR > 1 && $2 > 1' | awk -F "[ :]+" '{print $5}'
ss -tn state established | awk 'NR > 1 && $1 > 1' | awk -F "[ :]+" '{print $5}'

1.找出/tmp目录下,属主不是root,且文件名不以f开头的文件
find /tmp -user !root -name !"f.*"

2.查找/etc/目录下,所有.conf后缀的文件
find /etc -name "*.conf"

3.查找/var目录下属主为root,且属组为mail的所有文件
find /var -user root -group mail

4.查找/var目录下7天以前,同时属主不为root,也不是postfix的文件
find /var -mtime +7 -user !root -user !postfix

5.查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc -size +1m -type f

6.查找/etc目录下所有用户都没有写权限的文件
find /etc ! -perm \022

7.查找/目录下最后创建时间是3天前,后缀是*.log的文件
find / -ctime +3 -name "*.log"

8.查找/目录下文件名包含txt的文件
find / -name "*txt*"

1 使用grep 取 passwd 显示行数
grep -c /etc/passwd

2 使用grep 取passwd 显示行号
grep -n "" /etc/passwd

nl /etc/passwd

3 统计test信息在文件中出现了几次
grep -o test test.txt | wc -l

4 显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行
grep -e ":[0-9]:" /etc/inittab

5 显示/etc/passwd中以nologin结尾的行
grep -e "nologin$" /etc/passwd

6 显示 /etc/httpd/httpd.conf 注释的行取出来
grep -e "^#" /etc/httpd/httpd.conf > comment.txt

7 .统计/etc/services文件中有井号开头的行
grep -c -e "^#" /etc/services
107

利sed 取出ifconfIg ens33命令中本机的IPv4地址
ifconfig | grep ens18 -A 1 | grep inet | awk '{print $2}'
192.168.10.100

把/etc/passwd 复制到/root/test.txt,用sed打印所有行
cp /etc/passwd /root/test.txt && sed -n 'p' test.txt

打印test.txt的3到10行
sed -n '3,10p' test.txt

打印test.txt 中包含 ‘root’ 的行
sed -n '/root/p' test.txt

删除test.txt 的15行以及以后所有行
sed -i '15,$d' test.txt

删除test.txt中包含 ‘bash’ 的行
sed -i '/bash/d' test.txt

替换test.txt 中 ‘root’ 为 ‘ha’
sed -i 's/root/ha/g' test.txt

替换test.txt中 ‘/sbin/nologin’ 为 ‘/bin/login’
sed -i 's#/sbin/nologin#/bin/login#g' test.txt

打印/etc/passwd的奇数行?
sed -n '1~2p' test.txt

awk 'NR % 2 == 1' test.txt

把/etc/httpd/conf/httpd.conf文件内的Linsten 80改为Listen 8081 sed 完成
sed 's/^Linsten/Listen 8081/g' /etc/httpd/conf/httpd.conf

date文本组合

1
2
3
4
5
6
7
8
9
10
date
date +%Y
2025
date +%F
2025-02-24
date +%Y-%m-%d_%H:%M:%S
2025-02-24_15:44:59

date +"今天是个好日子%F"
今天是个好日子2025-02-24

yes重复输出同一字符串

1
2
3
4
5
6
yes "王盛真帅吧" | head -5
王盛真帅吧
王盛真帅吧
王盛真帅吧
王盛真帅吧
王盛真帅吧

组合文本

cat tac paste diff命令

tac 反向组合文本文件

就是cat的反向

1
2
3
4
5
6
7
8
9
10
11
输出文件内容后翻转
cat 123.txt 213.txt 321.txt | tac
3 2 1
2 1 3
1 2 3

反转文件内容后输出
tac 123.txt 213.txt 321.txt
1 2 3
3 1 2
3 2 1

paste复制

和cut是一对

1
2
3
4
5
6
7
8
9
10
11
12
13
14
paste 1.txt 2.txt
1 2
1 2
1 2

paste 1.txt 2.txt -d,
1,2
1,2
1,2

paste 1.txt 2.txt | cut -f2
2
2
2

tr

是简单的单个“字符”处理工具,主要用于字符转换或删除操作,其实不如sed

1
2
3
4
5
6
7
8
echo WangSheng | tr A-Z a-z
wangsheng
echo WangSheng | tr a-z A-Z
WANGSHENG

echo "Wang Sheng" | tr " " "\n" #空格换成换行符
Wang
Sheng
CATALOG
  1. 1. 剪切文本
  2. 2. 组合文本