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脚本学习指南