日期:2011-06-03 17:19:00 来源:本站整理
shell脚本中的sort号令[Linux安全]
本文“shell脚本中的sort号令[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
sort 号令
用处
排序文件、对已排序的文件举行归并,并查抄文件以肯定它们能否已排序.
语法
sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] ] ... [ -k KeyDefinition ] ... [ File ... ]
描写
sort 号令对 File 参数指定的文件中的行排序,并将后果写到尺度输出.假如 File 参数指定多个文件,那么 sort 号令将这些文件衔接起来,并当作一个文件举行排序.-(减号)替换文件名指定尺度输入.假如您不指定任何文件名,那么该号令对尺度输入排序.可以利用 -o 标志指定输出文件.
假如不指定任何标志,sort 号令基于当前语言环境的整理次序对输入文件的全部行排序.
排序关键字
排序关键字是输入行的一部份,由字段号和列号指定.字段是输入行的构成部份,由字段脱离符脱离.缺省字段脱离符是由一个或多个持续空格字符构成的序列.利用 -t 标志可指定差别的字段脱离符.在 C 语言和英语语言环境下,制表符和空格字符都是空格符.
利用排序关键字时,sort 号令首先按照第一个排序关键字的内容对全部行排序.然后,按照第二个排序关键字的内容,对全部第一个排序关键字相同的行排序,如此举行下去.按照排序关键 字在号令行中呈现的次序给它们编号.假如两行对全部排序关键字的排序都相同,则对全部行根据当前语言环境的整理次序举行对比.
对字段中的摆列行编号时,缺省字段脱离符中的空格符将作为后继字段计数.前导空格不计作第一字段的一部份,-t 标志指定的字段脱离符将不作为字段的一部份计数.可以利用 -b 标志忽视前导空格符.
可以利用下列两种办法定义排序关键字:
* -k KeyDefinition
* FSkip.CSkip(废弃版本).
利用 -k 标志定义排序关键字
-k KeyDefinition 标志采取下列情势:
-k [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
排序关键字包含全部以 FStart 变量指定的字段和 CStart 变量指定的列开首的及以 FEnd 变量指定的字段和 CEnd 变量指定的列完毕的字符.假如不指定 Fend,就假定行的最后一个字符.假如不指定 CEnd,就假定 FEnd 字段的最后一个字符.KeyDefinition 变量中的任何字段号或列号都可以省略.缺省值为:
FStart 行开首
CStart 字段第一列
FEnd 行完毕
CEnd 字段最后一列
假如字段间有肆意空格,sort 就把它们看做脱离的字段.
Modifier 变量的值可以是字母 b、d、f、i、n 或 r 中的一个或多个.修饰符仅利用于它们衔接的字段定义,与同一字母的标志有一样的效果.修饰符字母 b 仅利用于其衔接的字段定义的末尾.比方:
-k 3.2b,3r
指定排序关键字,从第三字段的第二非空格列开始并扩大至第三字段完毕,对这个关键字的排序以逆向整理次序完成.假如 FStart 变量和 CStart 变量在号令行末尾以外或在 FEnd 变量和 CEnd 变量之后,那么该排序关键字被忽视.
排序关键字也可用下列方法指定:
[+[FSkip1] [.CSkip1] [Modifier] ] [-[FSkip2] [.CSkip2] [Modifier]]
+FSkip1 变量指定跳过的字段数以到达排序关键字第一字段,+CSkip 变量指定在该字段中跳过的列数以到达排序关键字第一个字符.-FSkip 变量指定跳过的字段数以到达排序关键字后的第一个字符,-CSkip 变量指定在该字段中跳过的列数.可以省略任何要跳过的字段和列.缺省值为:
FSkip1 行开首
CSkip1 零
FSkip2 行完毕
CSkip2 零
Modifier 变量指定的改正量与 -k 标志关键字排序定义中的相同.
因为 +FSkip1.CSkip1 变量指定到达排序关键字前要跳过量少字段和列,所以这些变量指定的字段号和列号普通比排序关键字本身的字段号和列号小 1.比方:
+2.1b -3r
指定排序关键字,从第三字段的第二非空格列开始并扩大至第三字段完毕,对这个关键字的排序以逆向整理次序完成.语句 +2.1b 指定跳过两个字段,然后跳过前导空格和另一列.假如 +FSkip1.CSkip1 变量在号令行末尾以外或在 -FSkip2.CSkip2 变量之后,则忽视该排序关键字.
注:一行的最大字段数为 10.
标志
注:在任何排序关键字定义前呈现的 -b、-d、-f、-i、-n 或 -r 标志利用于全部排序关键字.-b、-d、-f、-i、-n 或 -r 标志都不能单独呈目前 -k KeyDefinition 之后;假如它们作为修饰符衔接 KeyDefinition 变量,那么就只利用于衔接排序关键字.假如这些标志之一跟随在 +Fskip.Cskip 或 -Fskip.Cskip 排序关键字定义后,那么该标志只能用于此排序关键字.
-A 利用 ASCII 整理次序替换当前语言环境的整理次序在逐字节的底子上排序.
-b 忽视前导空格和制表符,找出字段的第一或最后列.
-c 查抄输入能否已按照标志中指定的排序法则举行排序.假如输入文件排序不精确,就返回一个非零值.
-d 利用字典次序排序.对比中仅考虑字母、数字和空格.
-f 对比前将全部小写字母改成大写字母.
-i 对比中忽视全部非打印字符.
-k KeyDefinition 指定排序关键字.KeyDefinition 选项的格局为:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
排序关键字包含全部以 FStart 变量指定的字段和 CStart 变量指定的列开首的字符及以 FEnd 变量指定的字段和 CEnd 变量指定的列完毕的字符.Modifier 变量的值可以是 b、d、f、i、n 或 r. 修饰符与同一字母的标志等价.
-m 只归并多个输入文件;假定输入文件已经排序.
-n 按算术值对数字字段排序.数字字段可包含前导空格、可选减号、十进制数字、千分位脱离符和可选基数符.对包含任何非数字字符的字段举行数字排序会呈现无法预知的后果.
-o OutFile 将输出指向 OutFile 参数指定的文件,而不是尺度输出.OutFile 参数值可以与 File 参数值相同.
-r 倒置指定排序的次序.
-t Character 指定 Character 为单一的字段脱离符.
-u 禁止按照排序关键字和选项的全部平等排序(每一组行中一行除外).
-T Directory 将成立的全部暂时文件放入 Directory 参数指定的目录中.
-y[Kilobytes] 用 Kilobytes 参数指定的主存储的千字节数启动 sort 号令,并按照需求增添存储量.(假如 Kilobytes 参数指定的值小于最小存储站点或大于最大存储站点,就以这个最小存储站点或最大存储站点代替).假如省略 -y 标志,sort 号令以缺省的存储大小启动.-y0 标志用最小存储启动,而 -y 标志(不带 Kilobytes 值)用最大存储启动.sort 号令利用的存储量明显地影响性能.以大存储量对小文件排序将很浪费.
-z RecordSize 假如正在排序的任一行大于缺省的缓冲区大小,要避免呈现非常终止.指定 -c 或 -m 标志时,省略排序阶段,利用系统的缺省缓冲大小.假如已排序行超越这一大小,排序非常终止.-z 选项指定排序阶段最长行的记录,因而可在归并阶段分配充足的缓冲区.RecordSize 必须指明等于或大于要归并的最长行的字节值.
退出状况
该号令返回以下出口值:
0 全部输入文件成功输出,或指定了 -c 且精确排序了输入文件.
1 在 -c 选项下,文件没有按指定排序,或假如指定 -c 和 -u 选项,找到了两个具有相同关键字的输入行.
>1 发生错误.
示例
1. 要在 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 En_US 的情形下排序 fruits 文件,请输入:
LANG=En_US sort fruits
此号令序列显示以升序词典次序排序的 fruits 文件的内容.每一列的字符,包含空格、数字和特别字符都经一一对比.比方,假如 fruits 文件包含文本:
banana
orange
Persimmon
apple
%%banana
apple
ORANGE
sort 号令显示:
%%banana
ORANGE
Persimmon
apple
apple
banana
orange
在 ASCII 整理序列中,%(百分号)在大写字母前,大写字母在小写字母前.假如您当前的语言环境指定 ASCII 之外的字符集,后果大概差别.
2. 要以字典次序排序,请输入:
sort -d fruits
此号令序列排序和显示 fruits 文件的内容,并且只对比字母、数字和空格.假如 fruits 文件与示例 1 相同,那么 sort 号令显示:
ORANGE
Persimmon
apple
apple
%%banana
banana
orange
-d 标志忽视 %(百分号)字符,因为它不是个字母、数字或空格.(即 %%banana 被 banana 代替).
3. 要将包含大写字母和具有近似小写行的特别字符行分组,请输入:
sort -d -f fruits
-d 标志忽视特别字符,-f 标志忽视大小写差别.将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情形下,fruits 文件的输出后果变成:
apple
apple
%%banana
banana
ORANGE
orange
Persimmon
4. 要除去反复行排序,请输入:
sort -d -f -u fruits
-u 标志奉告 sort 号令除去反复的行,使文件中的每一行唯一.此号令序列显示:
apple
%%banana
orange
Persimmon
不但除去反复的 apple,并且也除去了 banana 和 ORANGE.除去这些是因为 -d 标志忽视 %% 这个特别字符,-f 标志忽视大小写差别.
5. 要如例 4 那样排序,除去反复的实例(除非是大写字母或标点差别),请输入:
sort -u +0 -d -f +0 fruits
输入 +0 -d -f 完成的排序与示例 3 中 -d -f 的排序范例相同,+0 举行另一项对比以辨别不一样的行.这避免 -u 标志将它们除去.
示例 1 所示的 fruits 文件中,增添的 +0 将 %%banana 与 banana 及 ORANGE 与 orange 区脱离来.但是,apple 的两个实例是相同的,所以此中之一被删除.
apple
%%banana
banana
ORANGE
orange
Persimmon
6. 要指定脱离字段的字符,请输入:
sort -t: +1 vegetables
此号令序列排序 vegetables 文件,对每一行上第一个冒号后的文本举行对比.+1 奉告 sort 号令忽视第一字段,从第二字段的开始到该行的完毕举行对比.-t: 标志奉告 sort 号令冒号脱离字段.假如 vegetables 包含:
yams:104
turnips:8
potatoes:15
carrots:104
green beans:32
radishes:5
lettuce:15
那么,将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情形下,sort 号令将显示:
carrots:104
yams:104
lettuce:15
potatoes:15
green beans:32
radishes:5
turnips:8
注意数字没有按照数字排序.当用字典式分类从左至右对比每一个字符时呈现这种情形.换句话说,3 在 5 之前,所以 32 在 5 之前.
7. 要排序数字,请输入:
sort -t: +1 -n vegetables
此号令序列按照第二个字段对 vegetables 文件举行数字排序.假如 vegetables 文件与示例 6 中的相同,那么 sort 号令将显示:
radishes:5
turnips:8
lettuce:15
potatoes:15
green beans:32
carrots:104
yams:104
8. 要对多个字段排序,请输入:
sort -t: +1 -2 -n +0 -1 -r vegetables
或
sort -t: -k2,2 n -k1,1 r vegetables
此号令序列对第二字段(+1 -2 -n)举行数字排序.在这个次序中,它以逆字母次序(+0 -1 -r)对第一字段排序.将 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 C 的情形下,输出将近似于:
radishes:5
turnips:8
potatoes:15
lettuce:15
green beans:32
yams:104
carrots:104
此号令按数字次序对行排序.当两行数字相同时,它们以逆字母次序出
以上是“shell脚本中的sort号令[Linux安全]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论