Shell基础知识 (3) 之 特殊符号、cut sort wc uniq tee tr split命令

1. 特殊符号

* 通配,任意多个任意字符
? 通配,任意一个字符
# 注释字符
\ 脱义字符
| 管道符  
$ 变量前缀,
!$组合,正则里面表示行尾
;多条命令写到一行,用分号分割,不管前面的命令执行成功与否,后面的命令都执行
~ 用户家目录,后面正则表达式表示匹配符
& 放到命令后面,会把命令丢到后台
> >> 2> 2>> &>(&>表示把正确和错误结果都定向出来)
[ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]
|| 和 && ,用于命令之间
|| 只有前面的命令执行失败,后面命令才执行
&& 只有后面的命令执行成功,后面命令才执行

2. 和管道符相关的命令

cut

一般用来截取字符串

  • -d 分隔符
  • -f 指定段号,可以是号码,中间用1,2隔开,也可以是区间1-3
  • -c 指定第几个字符,同上,可以是号码,中间用1,2隔开,也可以是区间1-3
cat /etc/passwd | head                              显示passwd的前10行(默认10)
cat /etc/passwd | haed -3                          显示passwd的前3行(指定)
cat /etc/passwd | haed -2 | cut -c 1-10    显示/etc/passwd前2行,1到10个字符
cat /etc/passwd | haed -2 | cut -d “:” -f 1,2      显示passwd的第一段和第二段
cat /etc/passwd | haed -2 | cut -d “:” -f 1-3      显示passwd的第一段到第三段

sort

sort命令是在Linux里非常有用,一般sort会和uniq合用。它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。- 来自 http://man.linuxde.net/sort

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

参数

  • -n 以数字大小排序,字母和特殊符号默认为0
  • -r 反向排序
  • -t 指定分隔符
  • -k 指定需要爱排序的栏位
  • (-t 不经常用)

例子

# cat sort.txt    
AAA:BB:CC 
aaa:30:1.6 
ccc:50:3.3 
ddd:20:4.2 
bbb:10:2.5 
eee:40:5.4 
eee:60:5.1
# sort -nk 2 -t: sort.txt    将BB列按照数字从小到大顺序排列
AAA:BB:CC 
bbb:10:2.5 
ddd:20:4.2 
aaa:30:1.6 
eee:40:5.4 
ccc:50:3.3 
eee:60:5.1
# sort -nrk 3 -t: sort.txt    将CC列数字从大到小顺序排列
eee:40:5.4 
eee:60:5.1 
ddd:20:4.2 
ccc:50:3.3 
bbb:10:2.5 
aaa:30:1.6 
AAA:BB:CC

wc

wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

  • -l 统计行数
  • -m 统计字符数
  • -w 统计词数
# wc -l 1.txt    统计行数 
11 1.txt
# wc -w 1.txt    统计词数
22 1.txt
# wc -m 1.txt    统计字符数 
620 1.txt
# wc 1.txt        统计行数 词数 字符数 
  11  22 620 1.txt

uniq

uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用

  • -c 统计行数
删除重复行
uniq file.txt 
sort file.txt | uniq 
sort -u file.txt

sort file.txt | uniq -c          统计各行在文件中出现的次数
sort file.txt | uniq -d          在文件中找出重复的行

tee

tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。

  • -a 追加重定向
ls | tee out.txt | cat -n  显示行号并打印out.txt,同时重定向到文件中
1  1.sh 
2  1.txt 
3  2.txt 
4  eee.tst 
5  EEE.tst 
6  one 
7  out.txt 
8  string2 
9  www.pdf 
10  WWW.pdf 
11  WWW.pef

tr

tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。常用来处理文档中出现的特殊符号。

  • -c:取代所有不属于第一字符集的字符;
  • -d:删除所有属于第一字符集的字符;
  • -s:把连续重复的字符以单独一个字符表示;
  • -t:先删除第一字符集较第二字符集多出的字符;
  • 字符集:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”。
echo "HELLO WORLD" | tr 'A-Z' 'a-z'  将输入字符HELLO WORLD由大写转换为小写
hello world                          'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,
                                      集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。

echo "thissss is a text linnnnnnne." | tr -s ' sn'  压缩输入中重复的字符
this is a text line.

echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'  字符集补集,从输入文本中将不在补集中的所有字符删除
1 2 3 4

split

split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。

  • -b:值为每一输出档案的大小,单位为 byte。
  • -l:值为每一输出档的列数大小。
dd if=/dev/zero bs=100k count=1 of=date.file  生成一个大小为100KB的测试文件
split -b 10k date.file                        将date.file文件分割成大小为10KB的小文件
ls
date.file xaa xab xac xad xae xaf xag xah xai xaj

split -l 10 date.file                          把文件分割成每个包含10行的小文件

split -b 50k date.file new_                    把文件分割成每个50k的小文件,切割成的文件以new_开头命名
ls
new_aa  new_ab  new_ac  date.file

猜你喜欢

转载自my.oschina.net/zhouyuntai/blog/1788849