赞
踩
平时操作命令的时候甚少,很多命令都非常生疏了。好记性不如烂笔头....
1 查找篇
1.1 which(寻找可执行文件)
这条命令主要是用来查找系统PATH目录下的可执行文件。说白了就是查找那些我们已经安装好的可以直接执行的命令。
fh:~ fenghuoMac$ which ls
/bin/ls
1.2 whereis(只找系统中某些特定目录下的文件)
这个命令可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。
fh:~ fenghuoMac$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
1.3 locate/updatedb(利用数据库来搜寻文件)
这个命令也是通过数据库查找文件,但是这个命令的适用范围就比whereis大多了。这个命令可以找到任意你指定要找的文件,并且可以只输入部分文件名(前面两个命令是要输入完整文件名的)。同时locte还可以通过-r选项使用正则表达式,功能十分强大。例如:
/wlsvhtest-tap0
/wlsvhtest-wlan1
/bin/alsaunmute
/bin/false
/bin/ls
这里只显示了前五条,但是实际上locate输出的内容是非常多的。
需要注意的是locate使用的索引数据库里的信息并不一定是实时有效的,可以使用updatedb命令更新索引数据库。
第一次执行locate时,它会建立一个索引数据库,当往后再次执行时,它便从索引数据库中迅速找出文件的位置。locate很适合用来反复搜索很少变动的目录树,但是对于刚改名的旧文件以及新建的文件,locate就找不到了,除非重建数据库。
1.4 find
find命令要比前边几条复杂的多,功能也强大的多。这条命令是通过直接搜索硬盘的方式查找的,所以可以保证查找的信息绝对可靠。并且支持各种查找条件。但是功能强大肯定是有代价的,那就是搜索速度慢。所以一般前边几种找不出来的情况下才会使用find。另外如果要实现某些特殊条件的查找,比如找出某个用户的size最大的文件,那就只能用find了。列几个实例:
在/home目录下查找以.txt结尾的文件名
find /home -name "*.txt"
//找出/home下不是以.txt结尾的文件
find /home ! -name "*.txt"
//当前目录及子目录下查找所有以.txt和.pdf结尾的文件
find . -name "*.txt" -o -name "*.pdf"
2 文件篇
2.1 cat
cat是英文语句concatenate files and print on the standard output的缩写,中文的意思是,把字符串连接后输出到屏幕上,此时的标准输出就是屏幕。
//显示1.txt内容
fh:Desktop fenghuoMac$ cat 1.txt
abc
456
//连接显示1.txt text.txt内容
fh:Desktop fenghuoMac$ cat 1.txt test.txt
abc
456
123
456
//上面的-b表示no blank,不计算空行的情况下显示行号。
fh:Desktop fenghuoMac$ cat -b 1.txt
1 abc
2 456
//在1.txt后面追加内容
fh:Desktop fenghuoMac$ cat >> 1.txt
900^D
//上面的-b表示no blank,不计算空行的情况下显示行号。
fh:Desktop fenghuoMac$ cat -b 1.txt
1 abc
2 456
3 900
//行数显示,空行也计算
fh:Desktop fenghuoMac$ cat -n 1.txt
1 abc
2 456
3
4
5 900
2.2 touch
touch命令很简单,只需知道两个用法就可以。第一个是用来快速创建空文件,第二个是用来修改文件的时间戳。
#创建文件
fh:Desktop fenghuoMac$ touch 1.txt
fh:Desktop fenghuoMac$ ls -l | grep 1.txt
-rw-r--r-- 1 fenghuoMac staff 0 4 11 10:56 1.txt
#改变文件的时间戳
fh:Desktop fenghuoMac$ touch 1.txt
fh:Desktop fenghuoMac$ ls -l | grep 1.txt
-rw-r--r-- 1 fenghuoMac staff 0 4 11 10:57 1.txt
3 文件处理器
命令grep,更适合单纯的查找或匹配文本
命令sed,更适合对匹配到的文本进行编辑
命令awk,更适合文本格式化,对文本进行较复杂的格式处理
3.1 grep
3.2 sed
sed 是stream editor(流编辑器)的缩写,是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
3.2.1 定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。
3.2.2 sed命令形式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
3.2.3 options
-e
-f
-n或--quiet或——silent:在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-i∶直接修改读取的档案内容,而不是由萤幕输出
3.2.4 常用命令
a\ 在当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。
d 删除,删除选择的行。
D 删除模板块的第一行。
s 替换指定字符
h 拷贝模板块的内容到内存中的缓冲区。
H 追加模板块的内容到内存中的缓冲区。
g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l 列表不能打印字符的清单。
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。
P(大写) 打印模板块的第一行。
q 退出Sed。
b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file 从file中读行。
t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file 写并追加模板块到file末尾。
W file 写并追加模板块的第一行到file末尾。
! 表示后面的命令对所有没有被选定的行发生作用。
= 打印当前行号码。
# 把注释扩展到下一个换行符以前。
3.2.5 元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
3.2.6 实例
1)删除
$ sed '2d' example-----删除example文件的第二行。
$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。
$ sed '$d' example-----删除example文件的最后一行。
$ sed '/test/'d example-----删除example文件所有包含test的行。
2)替换命令
sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
b) $ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
c) $ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
d) $ sed -n 's/
3) 编辑命令
a) $ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
b) $ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。
4)读入命令
//-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。(example的内容会被完全展示出来,然后在每个匹配test的行后面都会显示file的全部内容)
$ sed '/test/r file' example
5)写入命令
//在example中所有包含test的行都被写入file里(试了下这条命令会直接覆盖file文件里原来的内容)
$ sed -n '/test/w file' example
6) 退出命令
$ sed '10q' example-----打印完第10行后,退出sed。
7) 追加命令(先放着,Mac上没走通)
$ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。
8) 插入命令(先放着,Mac上没走通)
a) $ sed '/test/i\\
b) new line
c) -------------------------' example
d) 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。
9)下一个n命令(先放着,Mac上没走通)
a) $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。
3.3 awk
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
3.3.1 awk命令形式
awk [options] 'pattern{action}' file
或
awk [options] -f scriptfile var=value file(s)
3.3.2 options说明
//以下三个选项是最常用的,了解这三个即可
//一般最常用的又是这个,解析文本时常用到这个命令即可
-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v var=value or --asign var=value
赋值一个用户定义变量。
-f scripfile or --file scriptfile
从脚本文件中读取awk命令。
//不常用的
-mf nnn and -mr nnn
对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-W compact or --compat, -W traditional or --traditional
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright
打印简短的版权信息。
-W help or --help, -W usage or --usage
打印全部awk选项和每个选项的简短说明。
-W lint or --lint
打印不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
打印关于不能向传统unix平台移植的结构的警告。
-W posix
打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval or --re-inerval
允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text or --source program-text
使用program-text作为源代码,可与-f命令混用。
-W version or --version
打印bug报告信息的版本。
3.3.3 pattern说明
在没有options和pattern的情况下,使用命令awk
image
但pattern还包括两种特殊模式,分别是BEGIN和END:
1.BEGIN模式,是指命令在处理文本之前执行
image
2.END模式,是指命令在处理文本之后执行
image
3.BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理
image
3.3.4 内置变量说明
FS 输入字段分隔符,默认为空白字符
OFS 输出字段分隔符,默认为空白字符
RS 输入记录分隔符(输入换行符),指定输入时的换行符
ORS 输出记录分隔符(输出换行符),指定输出时的换行符
NF 当前行的字段数(当前行被分隔符分割成了几段)
NR 当前行的行号
FNR 不同文件分别计数
FILENAME 当前文件名
ARGV 数组,保存的是命令行所给定的各参数
ARGC ARGC数组的个数
3.3.5 实例说明
FS:以“:”为字段输入分隔符,输出第1列和第2列
1)使用-F选项指定输入分隔符
image
2)使用内置变量FS指定输入分隔符,需要注意的是,使用变量时,要使用-v选项来指定对应的变量
image
3)OFS:以“#”为字段输出分隔符,输出第1列和第2列
image
4)RS:以“:”为行输入分隔符,输出对应的行号和当前行内容。
需要注意的是,两个红框中的内容,由于Jack和DEF、Alice和GHI之间没有“:”,所以在awk中被认作为同一行
image
5)ORS:以“---”为行输出分隔符
image
6)NF:当前行的字段数
其中,$NF表示的是最后一个字段的内容,$(NF-1)表示的是倒数第二个字段的内容
7)NR:当前行号
8)FNR:不同文件分别计数
image
9)FILENAME:显示当前行的文件名
image
10)ARGV:数组,保存的是命令行所给定的各参数
image
11)ARGC:保存的是ARGV数组的个数
image
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。