常用的shell命令

shell中的文件名置换

* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。

正则表达式

一般用于grep sed awk中。

^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-
表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有
特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
p a t t e r n \ { n \ } 只用来匹配前面p a t t e r n出现次数。n为次数
p a t t e r n \ { n,\ } m 只含义同上,但次数最少为n
p a t t e r n \ { n,m \ } 只含义同上,但p a t t e r n出现次数在n与m之间

注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容。
[^a-zA-Z]

grep

grep [选项]基本正则表达式[文件]

grep '^$' myfile 查询空行

awk

如果要格式化报文或从一个大的文本文件中抽取数据包,那么a w k可以完成这些任务
awk脚本基本结构

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

awk '{if($4~/brown/) print }' grade.txt  如果f i e l d - 4包含b r o w n,打印它
awk '$4 ~ /brown/'   grade.txt  如果f i e l d - 4包含b r o w n,打印它(省略if,省略 print 默认打印整行)



内置变量

A R G C 命令行参数个数
A R G V 命令行参数排列
E N V I R O N 支持队列中系统环境变量的使用
FILENAME a w k浏览的文件名
F N R 浏览文件的记录数
F S 设置输入域分隔符,等价于命令行- F选项
N F 浏览记录的域个数
N R 已读的记录数
O F S 输出域分隔符
O R S 输出记录分隔符
R S 控制记录分隔符

内置的字符串函数
···
g s u b ( r, s ) 在整个$ 0中用s替代r
g s u b ( r, s , t ) 在整个t中用s替代r
i n d e x ( s , t ) 返回s中字符串t的第一位置
l e n g t h ( s ) 返回s长度
m a t c h ( s , r ) 测试s是否包含匹配r的字符串
s p l i t ( s , a , f s ) 在f s上将s分成序列a
s p r i n t ( f m t , e x p ) 返回经f m t格式化后的e x p
s u b ( r, s ) 用$ 0中最左边最长的子串代替s
s u b s t r ( s , p ) 返回字符串s中从p开始的后缀部分
s u b s t r ( s , p , n ) 返回字符串s中从p开始长度为n的后缀部分
···

awk printf

% c A S C I I字符
% d 整数
% e 浮点数,科学记数法
% f 浮点数,例如(1 2 3 . 4 4)
% g a w k决定使用哪种浮点数转换e或者f
% o 八进制数
% s 字符串
% x 十六进制数

sed

Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed [options] 'command' file(s) 
sed [options] -f scriptfile file(s)

sed 's/book/books/' file

-n选项和p命令一起使用表示只打印那些发生替换的行:
 sed -n 's/test/TEST/p' file

删除空白行: sed '/^$/d' file
删除文件最后一行: sed '$d' file
删除文件中所有开头是test的行: sed '/^test/'d file

sort

sort -cmu -o output_file [other options] +pos1 +pos2 input_files
-u 删除所有复制行。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。

uniq和sort -n的区别

sort -n 是去除所有重复行,uniq知会删除不断重复出现的行(结果中仍然可能存在重复的数据)。

nohup

如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用
n o h u p命令

nohup command &

标准输入输出

标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。
$ cleanup >cleanup.out 2>&1
在上面的例子中,我们将cleanup 脚本的输出重定向到>cleanup.out文件中,而且其错误也被重定向到相同的文件中。

command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入  //?这个“-”代表什么意思

find命令

find . -name "*.txt" -print   按名字查找
find . -name "[a-z][a-z][0--9][0--9].txt" -print  查找文件名以两个小写字母开头,跟着是两个数字,最后是* . t x t的文件
find / -mtime -5 -print  按照修改时间查找  -5代表5天以内, +5 代表5天以前
find . -newer new.file 查找比某个文件新的文件。
find . -type d  查找所有的目录
find . ! -type d 查找非目录文件
find . -size +1000000c 查找长度大于1M字节的文件
find logs -type f -mtime +5 -exec rm {} \; 使用exec执行shell指令

nl

显示文件行号

printf

格式化文本
%[- +]m.nx
-为从行首算起的起始位置
m表示域的宽度而n表示域的最大宽度
s:字符串。
c:字符。
d:数字。
x:1 6进制数。
o:1 0进制数。

SZX1000366880:~ # printf "0x%x\n" 1200
0x4b0

script

记录操作过程

scrpit mycmd.log

strings

查看二进制文件中的文本

strings file

uname

显示当前操作系统相关信息

wait processid

等待进程结束

wc

统计字符数、行数、单词数

wc -c
wc -l
wc -w

whereis

显示二进制文件及其在线手册的路径

whoami /who

当前登录名

basename

从路径中分离文件名

dirname

从路径中分离出文件名之外的部分

cat file1 file2 > file3

合并2个文件

diff

比较两个文件

dircmp

比较两个文件夹

file filename

确定文件类型

fuser -u /dev/sdb1

显示所有访问设备的进程
···
fuser -k file 杀掉所有访问文件的进程
···

posted @ 2017-11-16 18:55  abcyrf  阅读(323)  评论(0)    收藏  举报