灵魂腐蚀 发表于 2015-1-14 20:17:32

给大家带来Shell 文本处置工具集锦

如果您觉得本篇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文本
find.!-name"*.txt"-print
[*]指定搜刮深度
打印出以后目次的文件(深度为1)
find.-maxdepth1-typef
定制搜刮


[*]按范例搜刮:
find.-typed-print//只列出一切目次-typef文件/l标记链接
[*]定时间搜刮:
-atime会见工夫(单元是天,分钟单元则是-amin,以下相似)
-mtime修正工夫(内容被修正)
-ctime变更工夫(元数据或权限变更)
比来7天被会见过的一切文件:
find.-atime7-typef-print
[*]按巨细搜刮:
w字kMG
寻觅年夜于2k的文件
find.-typef-size+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)$"8sort排序

字段申明:
-n按数字举行排序VS-d按字典序举行排序
-r逆序排序
-kN指定按第N列排序
eg:
find.-regex".*(.txt|.pdf)$"9uniq打消反复行


[*]打消反复行
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指定定界符:
find.-maxdepth1-typef0

[*]cut取的局限
N-第N个字段到开头
-M第1个字段为M
N-MN到M个字段
[*]cut取的单元
-b以字节为单元
-c以字符为单元
-f以字段为单元(利用定界符)
[*]eg:
find.-maxdepth1-typef1

paste按列拼接文本

将两个文本按列拼接到一同;
find.-maxdepth1-typef2默许的定界符是制表符,能够用-d指明定界符
pastefile1file2-d","
1,colin
2,book
wc统计行和字符的工具

wc-lfile//统计行数
wc-wfile//统计单词数
wc-cfile//统计字符数
sed文本交换利器


[*]首处交换
find.-maxdepth1-typef3

[*]全局交换
find.-maxdepth1-typef4默许交换后,输入交换后的内容,假如必要间接交换原文件,利用-i:
find.-maxdepth1-typef5
[*]移除空缺行:
find.-maxdepth1-typef6
[*]变量转换
已婚配的字符勾通过标志&来援用.
find.-maxdepth1-typef7
[*]子串婚配标志
第一个婚配的括号内容利用标志1来援用
find.-maxdepth1-typef8
[*]双引号求值
sed一般用单引号来援用;也可以使用双引号,利用双引号后,双引号会对表达式求值:
find.-maxdepth1-typef9当利用双引号时,我们能够在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-print1awk完成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-print7eg: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-print9printf相似c言语中的printf,对输入举行格局化
eg:
find.-typef-size+2k0迭代文件中的行、单词和字符

1.迭代文件中的每行


[*]while轮回法
find.-typef-size+2k1
[*]awk法:
catfile.txt|awk{print}
2.迭代一行中的每个单词

find.-typef-size+2k23.迭代每个字符

${string:start_pos:num_of_chars}:从字符串中提取一个字符;(bash文本切片)
${#word}:前往变量word的长度
find.-typef-size+2k3本文为《linuxShell剧本攻略》的念书条记,文中次要内容和示例来自于
《linuxShell剧本攻略》;


如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!

只想知道 发表于 2015-1-15 16:04:43

给大家带来Shell 文本处置工具集锦

LZ敢整点更有创意的不?兄弟们等着围观捏~

若天明 发表于 2015-1-25 20:47:11

熟悉操作是日常学习Linux中的三大法宝。以下是作者学习Linux的一些个人经验,供参考:

小魔女 发表于 2015-2-4 13:03:37

下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题。

飘飘悠悠 发表于 2015-2-9 22:54:43

写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。

爱飞 发表于 2015-2-28 08:32:21

其次,Linux简单易学,因为我们初学者只是学的基础部分,Linux的结构体系非常清晰,再加上老师循序渐进的教学以及耐心的讲解,使我们理解起来很快,短期内就基本掌握了操作和运行模式。

变相怪杰 发表于 2015-3-10 02:46:48

熟读Linux系统有关知识,如系统目录树,有关内容可购书阅读或搜索论坛。

愤怒的大鸟 发表于 2015-3-17 08:10:45

随着Linux技术的更加成熟、完善,其应用领域和市场份额继续快速增大。目前,其主要应用领域是服务器系统和嵌入式系统。然而,它的足迹已遍布各个行业,几乎无处不在。
页: [1]
查看完整版本: 给大家带来Shell 文本处置东西集锦