页面

2012年5月31日星期四

Linux sed & sort

在开始说sed命令前先说说正则表达式

. 匹配任一个字符

^ 匹配行首

$  匹配行结束

[a-z]  ##匹配任意一个小写字母
[A-Z] ##匹配任意一个大写字母
[0-9] ##匹配任意一个数字


\{min,max\}   ##匹配精确的数目的字符串

[a-z]\{3,7\} ###匹配3~7个小写字母

如果 max为空值 如 [0-9]\{3,\}  ##匹配大于等于3位的数字

非运算
[^a-zA-Z]   ##非字母  与^[a-zA-Z] 不同 后者匹配行首为字母

寄存器
利用\(\)把正则表达式分开,把匹配到的内容放到1~9号寄存器。

$s/\(.*\)\(.*\)/\2\1/
交换两个字段


命令 sed 流编辑器
格式 : sed command file

替换

sed 's/Unix/UNIX/' intro     ###把文件中的 Unix 替换成UNIX

sed 命令不对源文件做任何改变,需要把输出重定向到输出文件才可以保存改变后的文件

sed 's/Unix/UNIX/' intro > temp ##把文件中的Unix替换成UNIX后保存到temp文件

-n 参数
指定输出某些行
如:
sed -n '1,2p' intro  ###显示文件intro的1,2两行

sed -n '/Unix/p' intro      ###显示带有Unix字符的行

其中p打印输出的意思

删除行
利用 d命令

sed -n '1,2d' intro  ###删除文件intro的1,2两行

sed -n '/Unix/d' intro      ###删除带有Unix字符的行

sort 命令

sort names ###对names文件进行排序 默认方式 升序排序

-u选项

sort -u names  ###对names文件进行排序 取出重复的行

-r选项

sort  -r  names  ##对names文件进行倒序排序


-o 选项 指定标准输出

sort names > sorted_names  ###利用重定向输出来写文件
相当于
sort names -o sorted_names  

但是想把排序后的内容重新写到源文件,如果利用以下命令并不能达到效果:
sort names >names
只会在屏幕先显示排序后的结果 源文件不改变

这时我们可以使用-o参数来实现这样的需求了

sort names -o names

当然也可以使用一个临时文件,通过重定向来实现

sort names > temp
cat temp>names

-n 参数以算术方法排序

sort -n data    ###对data文件进行算术排序


+1n +3n选项
跳过前一字段,跳过前面3个字段 进行数字排序

如  
#cat data
24
13
344
1233

#sort +1n data

13
24
1233
344

正则表达式

. 匹配任一个字符

^ 匹配行首

$  匹配行结束

[a-z]  ##匹配任意一个小写字母
[A-Z] ##匹配任意一个大写字母
[0-9] ##匹配任意一个数字

\{min,max\}   ##匹配精确的数目的字符串

[a-z]\{3,7\} ###匹配3~7个小写字母

如果 max为空值 如 [0-9]\{3,\}  ##匹配大于等于3位的数字

非运算
[^a-zA-Z]   ##非字母  与^[a-zA-Z] 不同 后者匹配行首为字母

寄存器
利用\(\)把正则表达式分开,把匹配到的内容放到1~9号寄存器。

$s/\(.*\)\(.*\)/\2\1/
交换两个字段


命令 sed 流编辑器
格式 : sed command file

替换

sed 's/Unix/UNIX/' intro     ###把文件中的 Unix 替换成UNIX

sed 命令不对源文件做任何改变,需要把输出重定向到输出文件才可以保存改变后的文件

sed 's/Unix/UNIX/' intro > temp ##把文件中的Unix替换成UNIX后保存到temp文件

-n 参数
指定输出某些行
如:
sed -n '1,2p' intro  ###显示文件intro的1,2两行

sed -n '/Unix/p' intro      ###显示带有Unix字符的行

其中p打印输出的意思

删除行
利用 d命令

sed -n '1,2d' intro  ###删除文件intro的1,2两行

sed -n '/Unix/d' intro      ###删除带有Unix字符的行

sort 命令

sort names ###对names文件进行排序 默认方式 升序排序

-u选项

sort -u names  ###对names文件进行排序 取出重复的行

-r选项

sort  -r  names  ##对names文件进行倒序排序


-o 选项 指定标准输出

sort names > sorted_names  ###利用重定向输出来写文件
相当于
sort names -o sorted_names  

但是想把排序后的内容重新写到源文件,如果利用以下命令并不能达到效果:
sort names >names
只会在屏幕先显示排序后的结果 源文件不改变

这时我们可以使用-o参数来实现这样的需求了

sort names -o names

当然也可以使用一个临时文件,通过重定向来实现

sort names > temp
cat temp>names

-n 参数以算术方法排序

sort -n data    ###对data文件进行算术排序


+1n +3n选项
跳过前一字段,跳过前面3个字段 进行数字排序

如  
#cat data
24
13
344
1233

#sort +1n data

13
24
1233

没有评论:

发表评论