shell学习笔记
2016-05-01 本文已影响57人
喜欢萝莉的逗逼青年
1tr命令
用途:translate 可以对字符进行替换、删除、压缩。
语法:tr 选项 string1 string2
选项:
-c complement 补集
-d delete 删除
-s squence 压缩(将重复的字符浓缩)
string1 要被替换,删除,压缩的源字符串,string2 用来替换的字符串
eg:echo “HELLO WORLD” | tr ‘A-Z’ ‘a-z’
hello world 字符串不是整体进行替换,是按照顺序一个一个进行替换的
eg:echo “hello world” | tr -d ‘hello’
wrd tr 会删除它匹配到的全部字符串
eg:echo “a1b2c3d4” | tr -d ‘0-9’
abcd
eg:“aa1dd/*4-#5$” | tr -d -c ‘0-9’
145 -c字符集补集,将不在补集中的所有字符删除
2 grep命令
用途:用于在一个或多个文件中查找关键字;不用于查找文件;
语法:grep 选项 'find-char' filename
在grep命令中输入字符串参数时,最好用双引号括起来,例如:“string”.
这样可以防止被误解为shell命令,二来可以查找多个单词组成的字符串,例如:“jet liu”.
不用双引号,liu会被认为是另一个文件.
在调用变量时,也应该使用双引号. grep“$var”.
在调用模式匹配时,应使用单引号.
选项:
-f pat-file(合适的) 从pat-file中按照模式进行匹配,相当于指定文件
-i 模式匹配忽略大小写
-l 列出匹配模式的文件名称,而非匹配的具体行
-n 显示匹配的行及行号
-v 反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
-c 只输出匹配行的计数.
-P 利用perl 正则语法进行匹配.
egrep 可以让一个文件作为保存的字符串,进行匹配,需要使用-f开关.
eg:grep -n '[program]' regular_express.txt
9:Oh! This is my first program.
3 sort
用途:将文件的每一行作为一个单位,相互比较,最后升序输出(默认升序)
语法:sort 选项 file
选项:
-r 从大到小排序
-o 将排序结果写到我们想要写的文件里
如果,将原文件排序后写到另一个文件,用-o和> 均可,若还写到原文件,必须-o
-n 以数值大小排序 -nr 以数值大小 反向排序
-t 制定某个字符作为分隔字符 (同 cut -d)
-k 定义排序键值字段(按列进行排序)
eg:sort -n -k 2 -t:t1.txt
按t1中的第二列升序输出
eg:liu 172 10000
cai 168 5000
guo 178 3000
zhao 168 2000
zhou 172 5000
按姓名顺序排序:sort -t ' ' -k 1 file
身高 :sort -t ' ' -k 2 file
按身高,身高相同,按工资升序排序:sort -n -t ' ' -k2 -k3 file (有的无法识别两个-k选项)
按工资降序排序,工资相同,按身高升序排序: sort -t ' ' -k 3r -k 2n file
其中,2n,3r中的n,r属于排序键值字段。相当于 -n,-r。
排序键值字段类型
b 忽略开头的空白
d 字典顺序
f 不区分字母的大小写
i 忽略无法打印的字符
n 以数字比较
r 倒置顺序的顺序
eg:sort -t ' ' -k 1.2 file
表示对一个域的第二个字符开始到本域最后一个字符位置的字符串进行排序
eg:sort -t ' ' -k 1.2 1.2 -k 3,3nr file
只对第二个字母进行排序,没有后面的1.2,将从第二个字符开始到本域最后一个字符位置的字符串进行排序
-k3 ,3nr 只对第三个域进行降序排序
4 sed命令
用途:sed是一种在线编辑器,一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间” (pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
语法:sed 选项 'edit command' file
sed -f script_file file
选项:-e 'edit command'
将edit command 使用在输入数据上,当有多个命令需要应用时,就必须使用-e
-f script-file
从指定的脚本里读取命令
-n
不是每个最后已修改结果行都正常打印,而是显示以p指定的(处理过的)行
eg:sed 's/\/home\/tos\//\/home\/lt\//' filename
将/home/tos/ 替换为 /home/lt/ (注意,/ ; :都可以作为定界符)
eg:sed 's/moding/moden/g' filename
将moding替换为modern
eg:sed -n 's/^west/north/p' filename
将west开头的行替换为north,并显示出来
eg:sed '/^ *$/d filename
删除文件的空行
eg:sed 's/[0-9] [0-9][0-9]$/& .5/' filename
将file文件中以3个数字结尾的行,替换为原来的数字+ .5,&代表搜索到的字符串.
eg:sed 's/\(mod)ing/\1en/g' filename
将moding 替换为moden
eg:sed '2,5d' file
显示除去2-5行的文件
eg:sed '/10[1-4]/d'
显示文件除去101-104的行
eg:sed -n '/101/,/105/p' < example.txt
显示example中从101-105的行.
eg:sed -e 's/foo/bar/g' -e 's/chicken/cow/g' filename >file1.txt
通过-e将多个命令传递给sed
& 在替代文本里表示:从此点开始,替代成匹配于正则表达式的整个文本
g global 全局性 全部的意思 没有g的话,只会对第一个匹配到的进行处理
s 命令里的空模式,指使用前一个正则表达式
5 cut 命令
用途:选取命令,取出所需,一般针对行操作.
语法:cut [-bn] file 或者cut -c file cut -df file,必须指定-b,-c,-f之一
选项:-b 以字节为单位进行分割
-c 以字符为单位进行分割
-d 指定分隔符,用来帮助-f
-f 指定显示那个区域.
-b -c,只能在固定的文档中提取信息,很多时候,bc没有区别.
对于非固定格式的文档,用域分隔:
cut -d :-f 1
用-d设置间隔符是:,然后用-f来截取我们所规定的第一个域.
cut -d :-f 3-5
截取以:作为分隔符的第三个到第五个这部分内容.