Shell命令学习笔记

Shell命令学习笔记

  1. tr 替换字符

  简单示例: tr 'A' 'a' < file.txt

  把每一个A字符替换为a字符。tr命令只能用于单个字符的替换,如果写成:

  tr 'ABC' 'abc' < file.txt

  则表示分别把A,B,C字符替换为a,b,c,而不是把字符串ABC替换为abc,字符串的替换需要用到sed命令,稍候会有介绍。

  2. grep 字符串查找

  简单示例 :grep world file.txt

  在输入文件或这标准输入中查找含有匹配字符串(此处是world)的行,并显示改行。

  用grep处理后的结果往往会成为后续处理的输入,所以可以用管道进行连接:

  grep world file.txt | wc -l

   wc -l表示统计行数,上述命令表示统计file.txt文件中含有world字符串的行数。

  上述命令等于 grep -c world file.txt

  匹配多个条件,条件之间为或关系:

  grep 'a\|b' file.txt

  查找file.txt文件中所有含有a或者b的行

  如果需要显示不匹配模式的行,则只需要加-v 选项。

  3. sed(Stream Editor),流编辑器,一般用于执行文本替换。

  Sed是以批处理而不是交互的方式来编辑文件,sed并不会修改源文件,只会把修改的结果发送到标准输出或者写入另外一个文件。

  简单示例:sed 's/world/hadoop/' < file.txt

  把每行中的第一个world替换成hadoop。

  命令中引号内开头的s表示要执行替换,sed的用途很多,但是一般用于文本替换。

  主要选项:

  -e 当需要有多个不同的替换时,每个替换命令必须以-e开头:sed -e 's/world/hadoop/' -e 's/hello/hallo/' < file.txt

  -f 当命令比较复杂时,可以把sed命令写入一个脚本文件(文件中的命令不要加单引号),然后执行sed命令时只需用-f指向该脚本文件即可:sed -f sed.txt < file.txt

  -n 默认sed会把源文件的修改结果发送到标准输出(无论是否经过替换,都会发送),选项-n关闭该功能。-n一般和p组合使用,表示只打印替换过的行,其余的行不打印:sed -n 's/world/hadoop/p' < file.txt

  sed命令除了可以以p结尾之外,还可以以g结尾: sed 's/world/hadoop/g',表示全局替换,亦即对每行中所有匹配的文本进行替换,而不是仅仅替换第一个。

  sed命令以数字结尾表示替换每行的第n个匹配字符串: sed 's/world/hadoop/2'

  应用:

  删除文本中所有空行:sed '/^$/d' file.txt

 4. cut 选定字段

  cut用来剪下文本文件里指定的字段,字段是指以定界符分隔的字符串,常见的分隔符有空格,制表符以及冒号。

  简单示例:

  cut -d : -f 1,5 /etc/passwd

  剪取/etc/passwd文件的第1,5个字段(字段从1而不是0开始标号),定界符为冒号。

  cut -f 1-5 file

  剪取第一到第五个字段

  cut -f 1- file

  剪取第一个到最后一个字段

  5. sort  排序工具

  sort将输入的每行看做一条记录,每条记录由多个字段组成,字段间以空白字符为间隔。

  简单示例:

  sort -t: -k1,1 /etc/passwd

  以:为间隔符,以第一个字段为排序字段对文件中的记录进行排序

  可以制定排序键值字段的类型,比如:

  sort -t: -k1,1nr /etc/passwd

  n是指把排序字段当做数值而不是字符串进行比较,如果指定了n,则2排在10前面,否则10排在2前面。

  r是指逆序

  其他常用的的排序键值字段类型为:

  b 忽略开头的空白

  f 不区分大小写

  另外,如果k后只写了一个数字,比如-k2,则意味着排序键值为第二个字段及其以后的所有字段,而不仅仅是第二个字段,如果只想用第二个字段作为排序键值,则应该使用-k2,2。

  当出现多个-k选项时,意味着首先用第一个k选项指定的键值进行排序,然后对第一个键值相同的一组记录使用第二个键值排序,以此类推。

  最后,sort的排序是不稳定的。

  6. wc WordCount工具

  wc用来进行计数:

  wc -c file.txt 统计字节数

  wc -w file.txt 统计单词数

  wc -l file.txt 统计行数

  如果不指定任何选项,则是依次输出行数,单词数,字节数。

  7. head tail  取得文件开头或者结尾数行

  head -n file.txt 输出文件的前n行

  tail -n file.txt  输出文件的后n行

  tail -n -f file.txt  输出文件的后n行,在文件有新的数据加入时显示新的数据(对查看log文件非常有用)

  8. Uniq 删除重复

  用例子说明,设文件file.txt内容为:

a 1
b 1
c 2
d 2
e 3

  则执行uniq -f 1 file.txt的结果为

a 1
c 2
e 3

   执行uniq -u -f 1 file.txt的结果为

   e 3

  9. split 切分文件

  split -l 100 file.txt 把文件file.txt按照100行为单位切分成数个文件,切分后的文件命名为xaa,xab,...

  split -b 200k file.txt 把文件file.txt按照200KB为单位进行切分,切分后的文件命名为xaa,xab,...

  参考文献:

[1] Shell脚本学习指南 

posted on 2012-10-28 14:34  潘的博客  阅读(401)  评论(0编辑  收藏  举报

导航