Linux 命令

两个文件比对,求交集,并集,差集。

a.txt
1
2
3
4
5
6
7
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
b.txt
1
2
3
4
5
6
7
8
aaaaa
ccccc
eeeee
ggggg
iiiii
jjjjj
kkkkk
lllll

方法1: sort

交集:

$sort a.txt b.txt | uniq -d

1
2
3
4
aaaaa
ccccc
eeeee
ggggg

并集:

sort a.txt b.txt | uniq

1
2
3
4
5
6
7
8
9
10
11
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
iiiii
jjjjj
kkkkk
lllll

差集:

sort a.txt b.txt b.txt | uniq -u

1
2
3
bbbbb
ddddd
fffff

说明: sort 先给文件排序。
-d 显示次数大于一次的行
-u 显示次数仅为一次的行

方法2: comm

comm a.txt b.txt

1
2
3
4
5
6
7
8
9
10
11
        aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
iiiii
jjjjj
kkkkk
lllll

显示三列:
第一列:a中有,b没有。a差b comm -2 -3 a.txt b.txt
第二列:a没有,b有。 b差a comm -1 -3 a.txt b.txt
第三列:ab都有 a交b comm -1 -2 a.txt b.txt

大小写互转

注意: 以下命令Mac OS无效

sed ‘s/[a-z]/\u&/g’
sed ‘s/[A-Z]/\l&/g’

拆解每一行中固定关键字的列

sed ‘s/.(action=[a-zA-Z]{1,}).(cmd=[_a-zA-Z-]{1,})./\1 \2/‘
注意:在次数匹配时:
1)圆括号必须转义
2)花括号必须转义