|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!本文将先容Linux下利用Shell处置文本时最经常使用的工具:
find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;
供应的例子和参数都是最经常使用和最为有用的;
我对shell剧本利用的准绳是下令单行誊写,只管不要凌驾2行;
假如有更加庞大的义务需求,仍是思索python吧;
find文件查找
- 查找txt和pdf文件
- find.(-name"*.txt"-o-name"*.pdf")-print
复制代码 - 正则体例查找.txt和pdf
- find.-regex".*(.txt|.pdf)$"
复制代码 -iregex:疏忽巨细写的正则
- 否认参数
查找一切非txt文本 - 指定搜刮深度
打印出以后目次的文件(深度为1) 定制搜刮
- 按范例搜刮:
- find.-typed-print//只列出一切目次
复制代码 -typef文件/l标记链接
- 定时间搜刮:
-atime会见工夫(单元是天,分钟单元则是-amin,以下相似)
-mtime修正工夫(内容被修正)
-ctime变更工夫(元数据或权限变更)
比来7天被会见过的一切文件: - 按巨细搜刮:
w字kMG
寻觅年夜于2k的文件按权限查找:- find.-typef-perm644-print//找具有可实行权限的一切文件
复制代码 按用户查找:- find.-typef-userweber-print//找用户weber所具有的文件
复制代码 找到后的后续举措
- 删除:
删除以后目次下一切的swp文件:- find.-typef-name"*.swp"-delete
复制代码 - 实行举措(壮大的exec)
- find.-regex".*(.txt|.pdf)$"0
复制代码 注:{}是一个特别的字符串,关于每个婚配的文件,{}会被交换成响应的文件名;
eg:将找到的文件全都copy到另外一个目次:- find.-regex".*(.txt|.pdf)$"1
复制代码 - 分离多个下令
tips:假如必要后续实行多个下令,能够将多个下令写成一个剧本。然后-exec挪用时实行剧本便可;- find.-regex".*(.txt|.pdf)$"2
复制代码 -print的定界符
默许利用
作为文件的定界符;
-print0利用 作为文件的定界符,如许就能够搜刮包括空格的文件;
grep文本搜刮
grepmatch_pattenfile//默许会见婚配行
- 经常使用参数
-o只输入婚配的文本行VS-v只输入没有婚配的文本行
-c统计文件中包括文本的次数- find.-regex".*(.txt|.pdf)$"3
复制代码 -n打印婚配的行号
-i搜刮时疏忽巨细写
-l只打印文件名
- 在多级目次中对文本递回搜刮(步伐员搜代码的最爱):
- find.-regex".*(.txt|.pdf)$"4
复制代码 - 婚配多个形式
- find.-regex".*(.txt|.pdf)$"5
复制代码
- grep输入以 作为开头符的文件名:(-z)
- find.-regex".*(.txt|.pdf)$"6
复制代码
xargs下令行参数转换
xargs可以将输出数据转化为特天命令的下令行参数;如许,能够共同良多下令来组合利用。好比grep,好比find;
- 将多行输入转化为单行输入
catfile.txt|xargs
是多行文本间的定界符
- 将单行转化为多行输入
catsingle.txt|xargs-n3
-n:指定每行显现的字段数
xargs参数申明
-d界说定界符(默许为空格多行的定界符为
)
-n指定输入为多行
-I{}指定交换字符串,这个字符串在xargs扩大时会被交换失落,用于待实行的下令必要多个参数时
eg:- find.-regex".*(.txt|.pdf)$"7
复制代码 -0:指定 为输出定界符
eg:统计步伐行数- find.-regex".*(.txt|.pdf)$"8
复制代码 sort排序
字段申明:
-n按数字举行排序VS-d按字典序举行排序
-r逆序排序
-kN指定按第N列排序
eg:- find.-regex".*(.txt|.pdf)$"9
复制代码 uniq打消反复行
- 打消反复行
- find.!-name"*.txt"-print0
复制代码
- 统计各行在文件中呈现的次数
- find.!-name"*.txt"-print1
复制代码
- 找出反复行
- find.!-name"*.txt"-print2
复制代码 可指定每行中必要对照的反复内容:-s入手下手地位-w对照字符数
用tr举行转换
- 通用用法
- find.!-name"*.txt"-print3
复制代码 - tr删除字符
- find.!-name"*.txt"-print4
复制代码 -c求补集- find.!-name"*.txt"-print5
复制代码 - tr紧缩字符
tr-s紧缩文本中呈现的反复字符;最经常使用于紧缩过剩的空格- find.!-name"*.txt"-print6
复制代码 - 字符类
tr中可用各类字符类:
alnum:字母和数字
alpha:字母
digit:数字
space:空缺字符
lower:小写
upper:年夜写
cntrl:把持(非可打印)字符
print:可打印字符
利用***:tr[:class:][:class:]- find.!-name"*.txt"-print7
复制代码 cut按列切分文本
- 截取文件的第2列和第4列:
- find.!-name"*.txt"-print8
复制代码
- 往文件除第3列的一切列:
- find.!-name"*.txt"-print9
复制代码
- -d指定定界符:
- cut取的局限
N-第N个字段到开头
-M第1个字段为M
N-MN到M个字段
- cut取的单元
-b以字节为单元
-c以字符为单元
-f以字段为单元(利用定界符)
- eg:
paste按列拼接文本
将两个文本按列拼接到一同;默许的定界符是制表符,能够用-d指明定界符
pastefile1file2-d","
1,colin
2,book
wc统计行和字符的工具
wc-lfile//统计行数
wc-wfile//统计单词数
wc-cfile//统计字符数
sed文本交换利器
- 首处交换
- 全局交换默许交换后,输入交换后的内容,假如必要间接交换原文件,利用-i:
- 移除空缺行:
- 变量转换
已婚配的字符勾通过标志&来援用. - 子串婚配标志
第一个婚配的括号内容利用标志1来援用 - 双引号求值
sed一般用单引号来援用;也可以使用双引号,利用双引号后,双引号会对表达式求值:当利用双引号时,我们能够在sed款式和交换字符串中指定变量;- find.-typed-print//只列出一切目次0
复制代码 - 别的示例
字符串拔出字符:将文本中每行内容(PEKSHA)转换为PEK/SHA- find.-typed-print//只列出一切目次1
复制代码 awk数据流处置工具
- awk剧本布局
awkBEGIN{statements}statements2END{statements}
- 事情体例
1.实行begin中语句块;
2.从文件或stdin中读进一行,然后实行statements2,反复这个历程,直到文件全体被读取终了;
3.实行end语句块;
print打印以后行
- 利用不带参数的print时,会打印以后行;
- find.-typed-print//只列出一切目次2
复制代码 - print以逗号支解时,参数以空格定界;
- find.-typed-print//只列出一切目次3
复制代码 - 利用-拼接符的体例(""作为拼接符);
- find.-typed-print//只列出一切目次4
复制代码
特别变量:NRNF$0$1$2
NR:暗示纪录数目,在实行过程当中对应该前行号;
NF:暗示字段数目,在实行历程总对应该前行的字段数;
$0:这个变量包括实行过程当中以后行的文本内容;
$1:第一个字段的文本内容;
$2:第二个字段的文本内容;- find.-typed-print//只列出一切目次5
复制代码
- 打印每行的第二和第三个字段:
- find.-typed-print//只列出一切目次6
复制代码
- 统计文件的行数:
- find.-typed-print//只列出一切目次7
复制代码 - 累加每行的第一个字段:
- find.-typed-print//只列出一切目次8
复制代码 传送内部变量
- find.-typed-print//只列出一切目次9
复制代码 用款式对awk处置的行举行过滤
awkNR<5#行号小于5
awkNR==1,NR==4{print}file#行号即是1和4的打印出来
awk/linux/#包括linux文本的行(能够用正则表达式来指定,超等壮大)
awk!/linux/#不包括linux文本的行
设置定界符
利用-F来设置定界符(默许为空格)
awk-F:{print$NF}/etc/passwd
读取下令输入
利用getline,将内部shell下令的输入读进到变量cmdout中;- find.-atime7-typef-print0
复制代码 在awk中利用轮回
for(i=0;i<10;i++){print$i;}
for(iinarray){printarray;}
eg:
以逆序的情势打印行:(tac下令的完成)- find.-atime7-typef-print1
复制代码 awk完成head、tail下令
- head:
- find.-atime7-typef-print2
复制代码 - tail:
- find.-atime7-typef-print3
复制代码 打印指定列
- awk体例完成:
- find.-atime7-typef-print4
复制代码
- cut体例完成
- find.-atime7-typef-print5
复制代码
打印指定文本地区
- 断定行号
- find.-atime7-typef-print6
复制代码
- 断定文本
打印处于start_pattern和end_pattern之间的文本;- find.-atime7-typef-print7
复制代码 eg:- find.-atime7-typef-print8
复制代码
awk经常使用内建函数
index(string,search_string):前往search_string在string中呈现的地位
sub(regex,replacement_str,string):将正则婚配到的第一处内容交换为replacement_str;
match(regex,string):反省正则表达式是不是可以婚配字符串;
length(string):前往字符串长度- find.-atime7-typef-print9
复制代码 printf相似c言语中的printf,对输入举行格局化
eg:迭代文件中的行、单词和字符
1.迭代文件中的每行
- while轮回法
- awk法:
catfile.txt|awk{print}
2.迭代一行中的每个单词
3.迭代每个字符
${string:start_pos:num_of_chars}:从字符串中提取一个字符;(bash文本切片)
${#word}:前往变量word的长度本文为《linuxShell剧本攻略》的念书条记,文中次要内容和示例来自于
《linuxShell剧本攻略》;
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们! |
|