Linux

Linux高级操作命令

2018-11-25  本文已影响10人  溯水心生

[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命令

[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的行。
 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表达式赋值。

sed '/test/rfile' test.txt

file里的内容被读进来,显示在与test匹配的行下面,如果匹配多行,则file的内容将显示在所有匹配行的下面。

sed -n'/test/example' test.txt

在example中所有包含test的行都被写入file里

sed'/^test/a\\--->this is a example' test.txt   

this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠

 sed '/test/{ n; s/aa/bb/; }' test.txt

如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续

sed '10q' test.txt

打印完第10行后,退出sed

3.awk命令

awk是流式编辑器,针对文档中的行来进行此操作,一行一行的执行,awk兼具sed的所有工鞥。

#head -n2 test.txt|awk -F ':' '{print $1}'
root
bin

-F 用来指定分割符,不加-F,则以空格或者tab作为分割符,1为第一个字段,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常用的变量有OFS,NF和NR,OFS和-F 选项有类似的功能,NF标识用分割符分隔后一共有多少段,NR标识行号
OFS的用法示例:

head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'
[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

上一篇 下一篇

猜你喜欢

热点阅读