文本处理

正则表达式

匹配操作符

\ 转义字符;

.匹配任意单个字符;

[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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值