linux命令学习之sed,awk,grep

上一篇 / 下一篇  2011-03-19 10:29:53 / 个人分类:Linux命令学习

1)把文件中的每行首字母小写变大写。
sed 's/[a-z]/\u&/'
2)把文件中的每个单词的首字母小写变大写。
sed 's/\<[a-z]/\u&/g'
sed -r 's/[a-z]+\>/\u&/g'
3)把文件中的每个单词的最后一个字母小写变大写。
s/[a-z]\>/\u&/g

NOTE:
\<[a-z]   ——>\<代表单词左边界,此处即空格、标点符号等之后的第一个字母
\u代表将匹配字符的第一个字母转换成大写,\U代表将匹配字符的所有字母转换成大写
\l代表将匹配字符的第一个字母转换成小写,\L代表将匹配字符的所有字母转换成小写
&   ——>代表之前的匹配

ref: http://bbs.chinaunix.net/archiver/?tid-1509683.html

2)有两个文件, file1和file2。这两个文件里的每一行都分别是一个单词,俩文件中有重叠的行。求出这俩文件中相同的行;file1中有,file2中没有的; file2中有file1中没有的;两文件的并集;删除两文件的交集,留下其他行。
grep -Fxf file1 file2 //第一个问题,共有行。
或者cat file1 file2|sort|uniq -d
grep -Fvxf file1 file2 //file2中有, file1中没有的
grep -Fvxf file2 file1 //file1中有, file2中没有的
cat file1 file2|sort|uniq //两文件并集
cat file1 file2|sort|uniq -u

3)NR表示当前行号。比如打印文件clk.log,同时每行把行号打印出来。
awk '{printf("%25s %5d\n", $0,NR)}' clk.log

4)如何向awk传递参数?
方法一: "'$test'"
方法二: awk 'a > 1 {...}' a=$a file
例子:
hlines=44
file1=test.txt
# $1是传递到脚本的第一个参数。
awk 'FNR <= hlines2 {print $0 > "'$file1'"}' hlines2=$hlines $1 

TAG:

 

评分:0

我来说两句

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 13356
  • 日志数: 38
  • 书签数: 9
  • 建立时间: 2010-12-22
  • 更新时间: 2011-04-11

RSS订阅

Open Toolbar