赞
踩
流式编辑器,主要擅长对文件的编辑操作,我们可以事先定制好编辑文件的指令,然后让sed自动完成对文件的整体编辑
# 用法 sed 选项 '定位+命令' 文件路径 # 选项 -n 取消默认输出 -r 支持扩展正则元字符(由于尚未学习正则,所以此处暂作了解) -i 立即编辑文件 # 定位 行定位: 1定位到第一行 1,3代表从第1行到第3行 不写定位代表定位所有行 正则表达式定位: /egon/ 包含egon的行 /^egon/ 以egon开头的行 /egon$/以egon结尾的行 数字+正则表达式定位 "1,8p"代表打印1到8行, "1,/egon/p"则代表取从第1行到首次匹配到/egon/的行 # 命令 d p s///g 命令可以用;号连接多多条,如1d;3d;5d代表删除1,3,5行 # =========================》用法示例:p与d [root@localhost ~]# sed '' a.txt egon1111 22222egon 3333egon33333 4444xxx44444 5555xxx55555xxxx555xxx 6666egon6666egon666egon [root@localhost ~]# sed -n '' a.txt [root@localhost ~]# [root@localhost ~]# sed -n '1,/xxx/p' a.txt egon1111 22222egon 3333egon33333 4444xxx44444 [root@localhost ~]# sed '1,/xxx/d' a.txt 5555xxx55555xxxx555xxx 6666egon6666egon666egon [root@localhost ~]# sed '1d;3d;5d' a.txt 22222egon 4444xxx44444 6666egon6666egon666egon # =========================》用法示例: s///g [root@localhost ~]# cat a.txt egon1111 22222egon 3333egon33333 4444xxx44444 5555xxx55555xxxx555xxx 6666egon6666egon666egon [root@localhost ~]# sed 's/egon/BIGEGON/g' a.txt # 把所有行的所有的egon都换成BIGEGON BIGEGON1111 22222BIGEGON 3333BIGEGON33333 4444xxx44444 5555xxx55555xxxx555xxx 6666BIGEGON6666BIGEGON666BIGEGON [root@localhost ~]# [root@localhost ~]# sed '/^egon/s/egon/GAGAGA/g' a.txt # 以egon开头的行中的egon换成GAGAGA GAGAGA1111 22222egon 3333egon33333 4444xxx44444 5555xxx55555xxxx555xxx 6666egon6666egon666egon [root@localhost ~]# sed '6s/egon/BIGEGON/' a.txt # 只把第6行的egon换成BIGEGON,加上g代表??? egon1111 22222egon 3333egon33333 4444xxx44444 5555xxx55555xxxx555xxx 6666BIGEGON6666egon666egon [root@localhost ~]# [root@localhost ~]# sed '1,3s/egon/BIGEGON/g' a.txt # 把1到3行的egon换成BIGEGON BIGEGON1111 22222BIGEGON 3333BIGEGON33333 4444xxx44444 5555xxx55555xxxx555xxx 6666egon6666egon666egon [root@localhost ~]# cat a.txt | sed '1,5d' # sed也支持管道 6666egon6666egon666egon # 加上-i选项,直接修改文件,通常会在调试完毕确保没有问题后再加-i选项
awk主要用于处理有格式的文本,例如/etc/passwd这种
# 用法 awk 选项 'pattern{action}' 文件路径 # 选项 -F 指定行分隔符 # 工作流程 awk -F: '{print $1,$3}' /etc/passwd 1、awk会读取文件的一行内容然后赋值给$0 2、然后awk会以-F指定的分隔符将该行切分成n段,最多可以达到100段,第一段给$1,第二段给$2,依次次类推 3、print输出该行的第一段和第三段,逗号代表输出分隔符,默认与-F保持一致 4、重复步骤1,2,3直到文件内容读完 # 内置变量 $0 一整行内容 NR 记录号,等同于行号 NF 以-F分隔符分隔的段数 # pattern可以是 /正则/ /正则/ # 该行内容匹配成功正则 $1 ~ /正则/ # 第一段内容匹配成功正则 $1 !~ /正则/ # 第一段内容没有匹配成功正则 比较运算: NR >= 3 && NR <=5 # 3到5行 $1 == "root" # 第一段内容等于root # action可以是 print $1,$3 # 用法示例 [root@localhost ~]# cat a.txt 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 [root@localhost ~]# awk -F: '/^root/{print $1,$3}' a.txt root 0 [root@localhost ~]# awk -F: '$1 ~ /^d/{print $1,$3}' a.txt daemon 2 [root@localhost ~]# awk -F: '$1 !~ /^d/{print $1,$3}' a.txt root 0 bin 1 adm 3 lp 4 [root@localhost ~]# awk -F: 'NR>3{print $1}' a.txt adm lp [root@localhost ~]# awk -F: '$1 == "lp"{print $0}' a.txt lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@localhost ~]# [root@localhost ~]# cat a.txt | awk -F: '{print $1}' # awk也支持管道 root bin daemon adm lp [root@localhost ~]#
事实上awk是一门编程语言,可以独立完成很强大的操作,我们将在shell编程中详细介绍
grep擅长过滤内容
# 用法 grep 选项 '正则' 文件路径 # 选项 -n, --line-number 在过滤出的每一行前面加上它在文件中的相对行号 -i, --ignore-case 忽略大小写 --color 颜色 -l, --files-with-matches 如果匹配成功,则只将文件名打印出来,失败则不打印 通常-rl一起用,grep -rl 'root' /etc -R, -r, --recursive 递归 # 示例 [root@localhost ~]# grep '^root' /etc/passwd root:x:0:0:root:/root:/bin/bash [root@localhost ~]# grep -n 'bash$' /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 44:egon:x:1000:1000:egon:/home/egon:/bin/bash [root@localhost ~]# grep -rl 'root' /etc # grep也支持管道,我们可以发现三剑客命令都支持管道 [root@localhost ~]# ps aux |grep ssh root 968 0.0 0.2 112908 4312 ? Ss 14:05 0:00 /usr/sbin/sshd -D root 1305 0.0 0.3 163604 6096 ? Ss 14:05 0:00 sshd: root@pts/0 root 1406 0.0 0.3 163600 6240 ? Ss 14:05 0:00 sshd: root@pts/1 root 2308 0.0 0.0 112724 984 pts/1 R+ 15:30 0:00 grep --color=auto ssh [root@localhost ~]# ps aux |grep [s]sh root 968 0.0 0.2 112908 4312 ? Ss 14:05 0:00 /usr/sbin/sshd -D root 1305 0.0 0.3 163604 6096 ? Ss 14:05 0:00 sshd: root@pts/0 root 1406 0.0 0.3 163600 6240 ? Ss 14:05 0:00 sshd: root@pts/1
[root@localhost ~]# which ip
/usr/sbin/ip
# ps: 一些命令的路径都被配置到了环境变量PATH里
echo $PATH
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。