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