文件名置换:
特殊字符:
* 匹配文件名中任何字符串,包括空字符串
$ls log*
$ls *.tmp
? 匹配文件名中任何单个字符
$ls ??.tmp // 03.tmp
[…] 匹配[]中所包含的任何字符
$ls [ai]* // 列出a或i开头的文件名
$ls log[0-9].txt // 列出log0.txt, log1.txt文件
[!…] 匹配[]中非感叹号!之后的字符
$ls log[!0-9].txt // 列出loga.txt,logz.txt等非数字匹配的文件
$ls log?[!0-9]* // 列出log1adb,log1rany等文件
read
从键盘或文件中的某一行文本中读入信息,并将其赋给一个变量
$read varible1 varible2 ...
cat
显示文件内容
// cat [options] file1 ... file2 ...
$cat -v log.tmp // -v会显示控制字符
$cat log1 log2 > log3
$cat > log4 // 等待输入并将结果重定向到log4中
tee
把输出的一个副本输送到标准输出,另一个拷贝到相应的文件中
tee -a files // 将信息追加到files文件末尾
标准输入、输出和错误
系统中有12个文件描述符,其中0、1、2是标准输入、输出和错误,可以任意使用文件描述符3-9。
指令 | 描述 |
---|---|
cmd > file | 把标准输出重定向到一个新文件中 |
cmd >> file | 把标准输出重定向追加到一个文件中 |
cmd 1> file | 把标准输出重定向到一个文件中 |
cmd > file 2>&1 | 把标准输出和标准错误一起重定向到一个文件中 |
cmd 2 > file | 把标准错误重定向到一个文件中 |
cmd 2 >>file | 把标准输出重定向追加到一个文件中 |
cmd >> file 2>&1 | 把标准输出和标准错误一起重定向追加到一个文件中 |
cmd < file1 > file2 | cmd命令以file1文件作为标准输入,以file2文件作为标准输出 |
cmd < file | cmd命令以file文件作为标准输入 |
cmd << delimiter | 从标准输入中读入,知道遇到delimiter分界符 |
cmd <& m | 把文件描述符m作为标准输入 |
cmd >& m | 把标准输出重定向到文件描述符m中 |
cmd <& - | 关闭标准输入 |
$grep "error" log 2>/dev/null // 将错误输出到/dev/null.不再显示在屏幕上
$grep "error" log 2>error.err // 将错误输出到error.err文件中
$cat account1.txt account2.txt 1>accout.info 2>accout.err // 将输出重定向到accout.info 文件中,将错误重定向到accout.err中
&&和||
command1 && command2 // command1执行成功才会执行command2
command1 || command2 // command1未执行成功才会执行command2
()和{}
():格式(cmd1;cmd2;...) // 在当前shell中执行一组命令
{}:格式{cmd1;cmd2;...} // 在子shell中命令被执行
$sort time.inf >time.sort &&( cp time.sort ./; lp time.sort)
正则表达式
^ 只匹配行首
$ 只匹配行尾
* 一个单字符后紧跟*,匹配0个或多个此单字符
[] 匹配[]内字符,可以是一个单字符,也可以是字符序列,可以使用-表示[]内字符序列范围
\ 用来屏蔽一个元字符的特殊函数
. 匹配任意单字符
pattern{n} 用来匹配其前面pattern出现次数,n为次数
pattern{n,} 含义同上,但次数最少为n
pattern{n,m} 含义同上,但pattern出现次数在n与m之间
grep
// grep [选项]基本正则表达式[文件]
$grep "error" *.log //在当前log后缀的文件中查找error字符串
$grep 'err[0-9]' 1.log // 在1.log文件中查找以err开始,数字结束的字符串
$grep '^[^warning]' 1.log // 在1.log文件中查找行首非warning的字符串
$grep '[Ee]rror' 2.err // 在2.err文件中查找Error和error的所有信息
$grep 'E....r' 2.err // 在2.err中查找以E开头中间4个字符以r结尾的所有字符串
$grep '[A-Z][A-z]..R' 2.err
$grep -E 'error|fail' log // -E 允许扩展,在log中查找匹配error或fail的数据
$ls -l | grep '^d' // 查询目录列表中的目录
$ls -l | grep '^[^d]' // 查询不包含目录的所有文件
$ls -l | grep '^d.....x..x' // 查询其他用户和其他用户组成员有可执行权限的目录集合
$grep -s "sky" /etc/password // -s可屏蔽出错信息
$ps ax|grep "cron" // 先查找所有进程,在此基础上列出cron进程信息
$STR="blue sky test"
$echo $STR|grep "sky" // 查找指定字符串
-c 只输出匹配行的计数
-i 不区分大小写
-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行及行号
-s 不显示不存在或无匹配文件的错误信息
-v 显示不包含匹配文本的所有行
类名及其等价的正则表达式
类 | 等价的正则表达式 |
---|---|
[[:upper:]] | [A-Z] |
[[:lower:]] | [a-z] |
[[:digit:]] | [0-9] |
[[:alnum:]] | [0-9a-zA-Z] |
[[:space:]] | 空格或tab键 |
[[:alpha:]] | [a-zA-Z] |
例:
$grep '5[[:upper:]][[:upper:]]' log // 查找log文件,匹配的字符串以5开头,后跟至少两个大写字母
$grep '[[:upper:]][[:upper:]][C,N]' log // 查找log文件,以C或N结尾的所有字符串