正则表达式
匹配操作符
\ 转义字符;
.匹配任意单个字符;
[1249a]包含1249中的任意一个;
^词首限制;
/< /> 词首词尾边界;
|连接操作符;
(,)选择操作符;
\n反向作用;
[ ]匹配指定范围的任意单个字符;
[^]匹配指定范围外的任意单个字符;
[a-z],[A-Z],[0-9],[a-z0-9];
[[:upper:]]所有大写字母;
[[:lower:]]所有小写字母;
[[:alpha:]]所有字母;
[[:digit:]]所有数字;
[[:alnum:]]所有的字母和数字;
[[:space:]]所有空白字符;
[[:punct:]]所有标点符号;
* 匹配前面字符任意次,0次,1次,任意次;
.* 匹配任意长度任意字符;
? 匹配前面的字符0次或1次;
+ 匹配前面的字符1次或多次;
\{m\}匹配前面字符m次;
\{m,n\}匹配前面字符至少m次,至多n次;
\{0,n\}匹配前面的字符至多n次;
\{m,\}匹配前面字符至少m次。
文件处理
文件分割
split命令
- 用于对较大的文件进行分割为较小的文件。
- -b 指定分割后每个文件的大小;
- -c 每一个输出中,单行的最大byte数;
- -d 使用数字作为后缀;
- -a 指定后缀的长度;
- -l 指定每一列输出的大小。
[root@localhost tmp]# dd if=/dev/zero of=date.file bs=100k count=1
1+0 records in
1+0 records out
102400 bytes (102 kB) copied, 0.000851488 s, 120 MB/s
[root@localhost tmp]# ls
date.file
[root@localhost tmp]# split -b 10k date.file
[root@localhost tmp]# ls
date.file xaa xab xac xad xae xaf xag xah xai xaj
[root@localhost tmp]# split -b 10k date.file -d -a 2
[root@localhost tmp]# ls
date.file x01 x03 x05 x07 x09 xab xad xaf xah xaj
x00 x02 x04 x06 x08 xaa xac xae xag xai
cut命令
- -b 以字节为单位进行分割。这些字节的位置将忽略多字节边界;
- -c 以字符为单位进行分割;
- -d 自定义分割;
- -s 不显示没有分隔符的行;
- -f 与-d一起使用,指定显示那个区域(列);
- -n 取消分割多节字符,仅和-b一起使用。
[root@localhost tmp]# cat file |cut -b 2,8
y5
hn
a7
a8
a1
o0
o1
[root@localhost tmp]# cat file |cut -c 3,6
nx
uo
lx
ix
rx
m:
mx
[root@localhost tmp]# cat file |cut -c 3-6
utdo
lt:x
il:x
ry:x
m:x:
m1:x
文件排序
sort命令
- 用于对字段进行排序。
- -f 忽略大小写的差异;
- -b 忽略最前面的空格;
- -m 以月份名字来排序;
- -n 使用纯数字进行排序;
- -r 反向排序;
- -t 分隔符,默认以tab建进行分割;
- -k 以指定区间进行排序;
- -u 相同区域仅出现一行;
- -o 将结果写入文件而非输出。
`默认排序`
[root@localhost tmp]# sort file
1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
6172fad14869bbb949ea1d60c4771f14 ./etop.sh
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
8dd2db4b88727758bb0800c321bafc34 ./west_proc
e45f64ed552ab0176be337ad77f3b3ae ./start.sh
`以第二个区域以.作为分隔符进行排序`
[root@localhost tmp]# sort -k 2 -t "." file
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
6172fad14869bbb949ea1d60c4771f14 ./etop.sh
8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
e45f64ed552ab0176be337ad77f3b3ae ./start.sh
1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
8dd2db4b88727758bb0800c321bafc34 ./west_proc
`以数字进行排序`
[root@localhost tmp]# sort -n file
e45f64ed552ab0176be337ad77f3b3ae ./start.sh
1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
8dd2db4b88727758bb0800c321bafc34 ./west_proc
6172fad14869bbb949ea1d60c4771f14 ./etop.sh
`以第二个区域以.作为分隔符且倒序排序`
[root@localhost tmp]# sort -k 2 -t "." -r file
8dd2db4b88727758bb0800c321bafc34 ./west_proc
1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
e45f64ed552ab0176be337ad77f3b3ae ./start.sh
8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
6172fad14869bbb949ea1d60c4771f14 ./etop.sh
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
`删除重复行`
[root@localhost tmp]# sort -u file
1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
6172fad14869bbb949ea1d60c4771f14 ./etop.sh
6d7fce9fee471194aa8b5b6e47267f03 ./aersion.ini
8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
8dd2db4b88727758bb0800c321bafc34 ./west_proc
e45f64ed552ab0176be337ad77f3b3ae ./start.sh
wc命令
- 用于显示文本的行数、单词数、字符数。
- -i 显示行数;
- -w显示单词数;
- -m 显示字符的个数;
- -c 显示字符的个数。
文件编辑
sed命令
- 行编辑器,用于对单行内容进行编辑。
- “#2i” 在指定行添加内容;
- “#p” 显示指定的#行;
- “#d” 删除指定的#行;
- “s/old/new/” 查找并替换
- “2a” 在指定行后面添加新行;
- -r 将指定的内容添加至符合条件处;
- -w 将地址指定范围中的行添加至文件中;
- -i 直接修改源文件;
- -n 静默模式,不在显示模式空间的内容;
- -e 同时执行多个脚本;
- -r 使用扩展正则表达式;
[root@localhost tmp]# cat file
hello word
oring
abled 2 anbled
linux 3 324
how are you
[root@localhost tmp]# sed "1d" file
oring
abled 2 anbled
linux 3 324
how are you
[root@localhost tmp]# sed "2p" file
hello word
oring
oring
abled 2 anbled
linux 3 324
how are you
[root@localhost tmp]# sed "2i\hello" file
hello word
hello
oring
abled 2 anbled
linux 3 324
how are you
[root@localhost tmp]# cat file
hello word
oring
abled 2 anbled
linux 3 324
how are you
[root@localhost tmp]# sed -i "2i\hello" file 直接修改源文件
[root@localhost tmp]# cat file
hello word
hello
oring
abled 2 anbled
linux 3 324
how are you
[root@localhost tmp]# sed "s/\(linux \)[0-9]\( 324\)/\18\2/" file 正则匹配
hello word
hello
oring
abled 2 anbled
linux 8 324
how are you
- 网卡信息修改
[root@localhost tmp]# cat file1
DEVICE=eth0
HWADDR=00:0C:29:3A:A9:41
IPADDR=192.168.144.29
NETMASK=255.255.255.0
GATEWAY=192.168.144.2
TYPE=Ethernet
UUID=83b1f538-dea8-4663-9722-27b068e8175a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
[root@localhost tmp]# sed "s/\(IPADDR=\([0-9]\?[0-9][0-9]\?\.\)\{3\}\).*/\130/" file1
DEVICE=eth0
HWADDR=00:0C:29:3A:A9:41
IPADDR=192.168.144.30
NETMASK=255.255.255.0
GATEWAY=192.168.144.2
TYPE=Ethernet
UUID=83b1f538-dea8-4663-9722-27b068e8175a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
`网络地址可以分为0-9、10-99、100-199、200-249、250-255`
[root@localhost tmp]# sed "s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|24[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\130/" file1
DEVICE=eth0
HWADDR=00:0C:29:3A:A9:41
IPADDR=192.168.144.30
NETMASK=255.255.255.0
GATEWAY=192.168.144.2
TYPE=Ethernet
UUID=83b1f538-dea8-4663-9722-27b068e8175a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
文本分析
awk命令
-
可以对文件逐行处理,(空格,制表符)为默认的分隔符,将文件分割后在对文件进行分析。
awk -f 运行程序文件 -
awk -F’分隔符’ ‘{ patten-action}’ file
– 支持自定义分隔符;
–支持正则表达式;
– 支持自定义变量、数组;
–支持内置变量;
–支持函数(print、);
–支持流程控制的类c语言:(if 、while 、for等)
[root@localhost tmp]# cat file3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
`仅输出第一列的内容`
[root@localhost tmp]# awk -F ":" '{print $1}' file3
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
uucp
operator
games
gopher
ftp
nobody
vcsa
saslauth
postfix
sshd
`仅输出第一列和第七列的内容`
[root@localhost tmp]# awk -F':' '{print $1 "\t" $7}' file3
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
uucp /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
gopher /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
vcsa /sbin/nologin
saslauth /sbin/nologin
postfix /sbin/nologin
sshd /sbin/nologin
`输出第一列和第七列的内容,并在开头加上name shell在结尾加上blue /bin/nosh`
[root@localhost tmp]# awk -F':' 'BEGIN{print "name\tshell"}{print $1 "\t" $7}END{print "blue\t/bin/nosh"}' file3
name shell
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
uucp /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
gopher /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
vcsa /sbin/nologin
saslauth /sbin/nologin
postfix /sbin/nologin
sshd /sbin/nologin
blue /bin/nosh
`显示出现root的行`
[root@localhost tmp]# awk '/root/ {print $0}' file3
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
`输出行数和列数,并输出该行的内容`
[root@localhost tmp]# awk -F ':' '{print NR "\t" NF "\t" $0}' file3
1 7 root:x:0:0:root:/root:/bin/bash
2 7 bin:x:1:1:bin:/bin:/sbin/nologin
3 7 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 7 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 7 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 7 sync:x:5:0:sync:/sbin:/bin/sync
7 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 7 halt:x:7:0:halt:/sbin:/sbin/halt
9 7 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 7 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
11 7 operator:x:11:0:operator:/root:/sbin/nologin
12 7 games:x:12:100:games:/usr/games:/sbin/nologin
13 7 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
14 7 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
15 7 nobody:x:99:99:Nobody:/:/sbin/nologin
16 7 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
17 7 saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
18 7 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19 7 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- 工资表问题处理以及程序文件
`建立文件储存信息`
[root@localhost tmp]# cat file
tom 0 2012-12-11 car 3000
john 1 2013-01-13 bike 1000
vi 1 2013-01-10 car 2000
tom 0 2013-02-10 bike 2500
john 1 2013-01-28 bike 3500
`对文件内容进行分割等处理,显示一月份的工资情况`
[root@localhost tmp]# awk -F ' ' '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}}END{for(i in name){print i "\t" name[i]}}' file
vi 2000
john 4500
`对文件内容进行分割等处理,显示一月份的工资情况并以第二列判断属于工人还是管理者`
[root@localhost tmp]# awk -F ' ' '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}if($2=="0"){role[$1]="manage"}else{role[$1]="worker"}}END{for(i in name){print i "\t" name[i] "\t" role[i]}}' file
vi 2000 manage
john 4500 worker
`将文件处理分割的命令写入文件中`
[root@localhost tmp]# vi awk.sh
{
split($3,date,"-");
if(date[2]=="01"){
name[$1]+=$5
}
if($2=="0"){
role[$1]="manage"
}
else{
role[$1]="worker"
}
}
END{
for(i in name){
print i "\t" name[i] "\t" role[i]
}
}
`运行程序文件`
[root@localhost tmp]# awk -f awk.sh file
vi 2000 manage
john 4500 worker
文件过滤
gerp命令
用于对文件进行过滤,找到需要的文件。
- --color=auto 对匹配到的文件进行颜色显示;
- -i 忽略大小写;
- -o 仅显示匹配到的字符本身;
- -v 显示不能被匹配的行;
- -q 不输出任何信息;
- -n 显示行号;
- -A # 后几行;
- -B # 前几行;
- C # 前后各几行;
- . 匹配单个任意字符;
- [] 匹配指定范围内的任意单个字符;
- [^] 匹配指定范围外的任意单个字符;
- [a-z],[A-Z],[0-9],[a-z0-9];
- [[:digit:]]匹配数字;
- [[:upper:]]:所有大写字母;
- [[:lower:]]:所有小写字母;
- [[:alpha:]]:所有字母;
- [[:digit:]]:所有数字;
- [[:alnum:]]:所有的字母和数字;
- [[:space:]]:所有空白字符;
- [[:punct:]]:所有标点符号。
- * 匹配前面字符任意次,0次,1次,任意次;
- .* 匹配任意长度任意字符;
- ? 匹配前面的字符0次或1次;
- + 匹配前面的字符1次或多次。
- \{m\}匹配前面字符m次;
- \{m,n\}匹配前面字符至少m次,至多n次;
- \{0,n\}匹配前面的字符至多n次;
- \{m,\}匹配前面字符至少m次。
- ^ 行首匹配;
- $ 行尾匹配;
- \< 词首锚定,用于单词模式的左侧;
- \> 词尾锚定,用于单词模式的右侧;
`匹配/etc/passwd文件中不以/bin/bash结尾的行`
[root@localhost tmp]# grep -v "/bin/bash$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
`匹配/etc/passwd中以root开头的文件`
[root@localhost tmp]# grep "\<root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
`匹配/etc/passwd中以root结尾的文件`
[root@localhost tmp]# grep "root\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
`匹配/etc/passwd两位数或者三位数`
[root@localhost tmp]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
`找出/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行`
[root@localhost tmp]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
load_env
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
set default="${saved_entry}"
menuentry_id_option="--id"
menuentry_id_option=""
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
set timeout_style=menu
set timeout=5
set timeout=5
source ${prefix}/user.cfg
if [ -n "${GRUB2_PASSWORD}" ]; then
set superusers="root"
export superusers
password_pbkdf2 root ${GRUB2_PASSWORD}
fi
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod xfs