命令难度总体来说有简入难,参数都是工作中常常用到的。如果涉及到一些生僻的参数还请百度或man一下。
sort(参考学习网站:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html)
功能:根据不同的数据类型进行排序
格式:sort [-cMnrtk][源文件][-o 输出文件]
说明:
如果有一个文件"1.txt",假如有一列数字,分别为1,2,2,3,5,4
-n: 依照数值的大小排序 --> 数字以字符进行排序时,2比10大 cat 1.txt | sort -n
-u: 在输出行中去除重复行 cat 1.txt | sort -u
-r:反序排列 cat 1.txt | sort -r
-o:将结果输出到源文件(如果使用sort -n 1.txt > 1.txt,将导致文件内容丢失 使用 sort -n 1.txt -o 1.txt)
-t(分隔符),-k(区间数):确定排序的列 -->sort -nr -t":" -k 3 /etc/passwd 将文件的第三列以数字的形式进行f反向排序
uniq(参考学习网站:http://blog.csdn.net/e421083458/article/details/37913181)
功能:读取输入文件,并比较相邻的行。可去除重复行。(使用前,需要用sort先进行排序)
格式:uniq [-cdu] 文件
说明:
-c:在输出行前面加上每行在输入文件中出现的次数
-d:仅显示重复行
-u:仅显示不重复的行
示例:cat /etc/passwd | awk -F":" ‘{print $7}‘| sort |uniq -c --> 查看passwd中解释器种类及数量
cut(参考学习地址:http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html)
功能:对文件进行内容选取,对所有行进行操作
格式:cut [-bcdfn] 文件
说明:
-b :以字节为单位进行分割。【这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志】(数字/字母/符号,一个一个字节,汉子为三个字节 echo "好的" | cut -b 4-6
-c :以字符为单位进行分割
-d :自定义分隔符,只能是单一character。这个区分与awk,有时候awk更为方便。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内
示例:
cat /etc/passwd | cut -d":" -f7 |sort | uniq (查看/etc/passwd中所有用户地解释器种类有多少)
sed(学习参考地址:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html、http://www.iteye.com/topic/587673)
功能:在线编辑器,自动编辑一个或多个文件,简化对文件的反复操作、编写转化程序等。不会改变原文件内容
次处理一行数据,首先将数据放入临时缓冲区中,sed命令处理缓冲区中的内容,完成后输出到屏幕。后接着处理下一行,知道结尾
地址:通过地址(数字)来指定编辑对应的行,以逗号分隔两个数字作为起始位置(含),例:1,5(第一行到第五行),$表示最后一行
格式:sed [-nefr] [动作]
说明:
-n:安静(silent)模式, 加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-e:多点编辑/命令,直接在命令列模式上进行 sed 的动作编辑
-i:直接修改读取的文件内容,而不是输出到终端(修改原文件)
-f:直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作(不常用)
-r:sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)(不常用)
动作部分
[n1,n2]动作
n1、n2为操作的作用地址,$是行尾
a:新增 ,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c:取代,c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d:删除,因为是删除啊,所以 d 后面通常不接内容
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p:列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g
示例:
新增:sed ‘2a hello world‘ /etc/passwd:在第二行的后面新增一行;
sed ‘2,3a hhh‘ /etc/passwd (会在第三行和第四行都会增加hhh)
取代:sed ‘2,$c hhh‘ /etc/passwd (第二行到最后一行被取代)
删除:sed ‘2,$d‘ /etc/passwd :删除第二行到最后一行
插入:sed ‘2i hhh‘ /etc/passwd :第二行插入字符串,原第二行变成了第三行
sed ‘2,5i hhh‘ /etc/passwd :第二行到第五行中间都将插入字符串
列印:sed -n ‘2,3p‘ /etc/passwd:将第2,3行内容输出
补充:sed是常用正则表达式的一种命令,在此不做进一步深挖。可参考百度
grep(参考学习网站:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html)
功能:General Regular Expression Parser,通用正则表达式的缩写是,一种文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。在grep的基础还有扩展了egrep/fgrep等信息
格式:grep [-acinv] [--color=auto] ‘搜寻字符串‘ filename
说明:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字符串‘ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串‘ 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔
-A(n):After,将查找的结果连后(n)行业显示出来
-B(n):Before,作用参上
-C(n):Center,作用参上
正则表达式
[ ]:匹配任意一个字符 -->grep -n "[1-9][3-9]" 匹配以1-9任意数据开始,后面跟3-9任意一个数字,则数据范围在13~99之间
[^]:反向选择
^、$:开始、结尾符, -->grep -n "^root.*root$" 匹配以root开头并以root结尾的行
.:至少有任意一个字符
?:任意一个字符,0或1个(需要使用grep -E)
*:重复前一个字符(串)n(n>=0)个
+:重复前一个字符1次以上(需要使用grep -E)
示例:
grep -A1 -n --color=auto "^hd.*/bash$" /etc/passwd >>以hd开始,/bash结尾,输出行数、对应行及下一行并高亮。
find(参考学习地址:http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html )
功能:目录结构中搜索文件,并执行指定的操作,涉及到较多搜索时,放到后台进行(命令结尾添加:&)
格式:find pathname [选项]
说明:
-name :按照文件名查找文件
-type:依据文件类型查找,
f:普通文件
d:目录
l:符号链接文件
b/c:块/字符设备文件
P:管道文件
-print:将匹配的文件输出到标准输出(-print0:不换行)
-size:匹配文件大小(K/M/G)
-perm:(permission)匹配文件权限进行查找
示例:find ~ -perm 755 -type d -name "demon*" (在家目录下查找权限是755以demon开头的目录)
-user/-group :匹配文件属主/组主进行文件查询。
示例:find ~ -user sunhuaj -name "hehe" (查找家目录下属主为sunhuaj名称为hehe的文件)
文件元数据:accesstime、modifytime、changetime
+:时间之前;-:时间之内(最近时间内)
-ctime:+/-n 根据文件的创建时间进行查找 【以天维度,跨度大;-cmin,分钟维度】
-atiime:+/-根据文件的访问时间进行查找【同上;-amin,分钟维度】
-mtime:+/-根据文件的修改时间进行查找【同上;-mmin分钟维度】
-exec cmd {} \;:find命令对匹配的文件执行该参数所给出的shell命令,注意“{}”与“\;”有空格
示例:
1、查找一天以内创建的1小时之前修改过的大于3M的文件
find ~ -ctime -1 -mmin 60 -size +3M -print
2、查找空文件/目录
find / -empty
3、查看目标文件的详细信息
find ~ -name "*shj*" -exec ls -l {} \;
awk(参考学习网址:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html)
功能:强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
格式:awk ‘{pattern + action}‘ {filenames}
pattern:表示 AWK 在数据中查找的内容,为要表示的正则表达式,用斜杠括起来
action:找到匹配内容时所执行的一系列命令。
说明:花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组
示例:
a、last -n 5 | awk ‘{print $1}‘:显示最近登录的五个账号
awk工作流程是这样的:读入有‘\n‘换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推
b、cat /etc/passwd | awk -F":" ‘{print $1}‘ :只显示/etc/passwd的用户
cat /etc/passwd | awk -F":" ‘{print $1"\t"$7}‘ :显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
c、cat /etc/passwd |awk -F ‘:‘ ‘BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}‘
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作
d、cat /etc/passwd | awk ‘/root/‘ :搜索有关键字rootde行
e、 awk -F: ‘/root/{print $7}‘ /etc/passwd:搜索/etc/passwd有root关键字的所有行,并显示对应的shell
转载请注明出处!欢迎邮件沟通:shj8319@sina.com
Linux进阶命令-sort、uniq、 cut、sed、grep、find、awk