[TOC]
一、Linux高级操作命令
1.cut
可以从一个文本文件或者文本流中提取文本列
[root@localhost ~]# echo $PATH
~/anaconda2/bin:/usr/local/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:/usr/local/activemq/bin:/usr/local/ant/bin:/usr/local/java/bin/bin:/usr/local/memcached/bin:/usr/local/mongodb/bin:/root/bin
取出第五个路径
[root@localhost ~]# echo $PATH |cut -d ':' -f 5
/usr/sbin
将Path变量取出,取出第三个和第五个
[root@localhost ~]# echo $PATH |cut -d ':' -f 3,5
/usr/local/sbin:/usr/sbin
将Path变量取出,取出第三个到最后一个
[root@localhost ~]# echo $PATH |cut -d ':' -f 3-
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:/usr/local/activemq/bin:/usr/local/ant/bin:/usr/local/java/bin/bin:/usr/local/memcached/bin:/usr/local/mongodb/bin:/root/bin
将Path变量取出,取出一个到第三个变量
[root@localhost ~]# echo $PATH |cut -d ':' -f 1-3
~/anaconda2/bin:/usr/local/node/bin:/usr/local/sbin
2.sed命令
- 删除: d命令
[root@localhost WorkSpace-Python]# sed '2d' example -----删除example文件的第二行。
root@localhost WorkSpace-Python]# sed '2,$d' example -----删除example文件的第二行到末尾所有行。
root@localhost WorkSpace-Python]# sed '$d' example -----删除example文件的最后一行。
root@localhost WorkSpace-Python]# sed '/test/'d example ----删除example文件所有包含test的行。
- 替换: s命令
sed 's/test/mytest/g' example
整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
sed -n 's/^test/mytest/p' example
(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
sed d 's/^192.168.0.1/&localhost/' example
符号表示追加一个串到找到的串后。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
sed -n 's/loveable/\1rs/p' example
love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
sed 's#10#100#g' example
不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。
选定行的范围:逗号
sed -n '/test/,/check/p' example
所有在模板test和check所确定的范围内的行都被打印。
sed -n '5,/^test/p' example
打印从第五行开始到第一个包含以test开始的行之间的所有行。
sed '/test/,/check/s/$/sed test/' example
对于模板test和west之间的行,每行的末尾用字符串sed test替换。
多点编辑:e命令
sed -e '1,5d' -e 's/test/check/' example
(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果
sed --expression='s/test/check/' --expression='/love/d' example
一个比-e更好的命令是--expression。它能给sed表达式赋值。
- 从文件读如: r命令
sed '/test/rfile' test.txt
file里的内容被读进来,显示在与test匹配的行下面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
- 写入文件: w命令
sed -n'/test/example' test.txt
在example中所有包含test的行都被写入file里
- 追加命令: a 命令
sed'/^test/a\\--->this is a example' test.txt
this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠
- 插入: i命令
sed '/test/{ n; s/aa/bb/; }' test.txt
如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续
- 退出: q
sed '10q' test.txt
打印完第10行后,退出sed
3.awk命令
awk是流式编辑器,针对文档中的行来进行此操作,一行一行的执行,awk兼具sed的所有工鞥。
- 截取文档中的某个片段
#head -n2 test.txt|awk -F ':' '{print $1}'
root
bin
-F 用来指定分割符,不加-F,则以空格或者tab作为分割符,2为第二个字段,$0为整行
- 匹配字符或者字符串
# awk '/oo/' test.txt
root:x:0:0:root:/root:/bin/bash
查找对应字符串在test.txt文件文件中
# awk -F ':' '$1 ~/oo/' test.txt
~的意思是按字符串段去匹配
- 条件操作符
[root@localhost ~]# awk -F ':' '$3=="o"' /etc/passwd
root:x:0:0:root:/root:/bin/bash
匹配第三个字段信息为o的信息,支持>,<,<=,>=,!=,&&&,||等符号,双引号表示字符串,不加引号则表示数字。
[root@localhost ~]# awk -F ':' '$3>=500' /etc/passwd
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
libstoragemgmt:x:996:993:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:995:992:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:994:76:Saslauthd user:/run/saslauthd:/sbin/nologin
geoclue:x:993:991:User for geoclue:/var/lib/geoclue:/sbin/nologin
setroubleshoot:x:992:989::/var/lib/setroubleshoot:/sbin/nologin
chrony:x:991:988::/var/lib/chrony:/sbin/nologin
sssd:x:990:987:User for sssd:/:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
zhangyongliang:x:1000:1000:ZhangYongLiang:/home/zhangyongliang:/bin/bash
dockerroot:x:988:983:Docker User:/var/lib/docker:/sbin/nologin
slapd-dcm4chee:x:1021:1021::/home/slapd-dcm4chee:/bin/bash
dcm4chee-arc:x:1023:1023::/home/dcm4chee-arc:/bin/bash
打印uid序号大于500的用户信息
- awk的内置变量
awk常用的变量有OFS,NF和NR,OFS和-F 选项有类似的功能,NF标识用分割符分隔后一共有多少段,NR标识行号
OFS的用法示例:
head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'
- awk的数学运算
[root@localhost ~]# head -n2 /etc/passwd |awk -F ':' '{$7=$3+$4; print $0}'
root x 0 0 root /root 0
bin x 1 1 bin /bin 2
网友评论