换行符号 | \r\n |
水平制表,跳格(移至下一列) | \t |
垂直制表 | \v |
上一条指令 | !! |
命令历史第n条 | !n |
最近一次以字符串为开头的命令 | !字符串 |
执行上一个变量 | !$ |
执行多行命令分隔符 | ; |
用户的家目录 | ~ |
命令后台运行 | 末尾+ & |
通配多个字符 | * |
通配1个字符 | ? |
输出重定向 | > |
输入重定向 | < |
追加重定向 | >> |
错误重定向 | 2> |
管道符 | | |
中间字符中的任意一个 | [ ] |
命令顺序执行,1成功才执行2 | && |
命令管道,1成功不执行2,1不成功执行2 | || |
命名 | alias panyu='pwd' |
解除命名 | unalias panyu |
暂停进程 | Ctrl+z |
恢复进程/调到前台 | fg |
后台运行 | bg |
终止进程 | Ctrl+c |
查看暂停或后台进程 | jobs |
命令后台运行 | & 符号 |
显示信息pid | ps aux |
显示变量值 | echo $PATH |
显示系统变量 | env |
显示环境变量(用户) | set |
定义变量例子 | panyu=Amingst |
取消变量 | unset panyu |
定义系统变量 | “/etc/profile” 文件最末行加入 export myname=Aming 然后运行 source /etc/profile |
定义环境变量(用户) | 用户主目录下的 .bashrc 文件最后一行加入 export myname=Aming 然后运行 source .bashrc |
注意事项 | |
1. 设定变量的格式为 “a=b”, 其中a为变量名,b为变量的内容,等号两边不能有空格; | |
2. 变量名只能由英、数字以及下划线组成,而且不能以数字开头; | |
3. 当变量内容带有特殊字符(如空格)时,需要加上单引号;变量内容中本身带有单引号,这就需要用到双引号 | |
4. 如果变量内容中需要用到其他命令运行结果则可以使用反引号 | |
5. 变量内容可以累加其他变量的内容,需要加双引号; | |
进入子shell | bash |
查看shell的tree | pstree |grep bash |
变量输出(子shell有用) | export abc |
所有变量输出,声明所有变量 | export |
显示行数 line | wc -l |
显示字数 word | wc -w |
显示Bytes数 chars | wc -c |
cut | 分隔符分隔截取 |
-d | divide:分隔符 |
-f | fundamental基础后面接的是第几个区块,默认行 |
-c | char 后面接的是第几个字符 |
cat /etc/passwd |cut -d ':' -f 1 |head -n5 | 输出第一行以:为分隔符的5个块 |
head -n2 /etc/passwd|cut -c2 | 输出前两行每行第二个字母 |
head -n2 /etc/passwd|cut -c1-10 | 输出前两行每行的10个字母 |
head -n2 /etc/passwd|cut -c5-10 | 输出前两行每行的第5到第10个字母 |
head -n2 /etc/passwd|cut -c1,3,10 | 输出前两行每行的第1、3、5的字母 |
sort | |
-t | tab分隔符 :作用跟cut的-d一个意思 |
-n | number:使用纯数字排序 |
-r | 反向排序 |
-u | 去重复 |
-kn1,n2 | 由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序 |
head -n5 /etc/passwd |sort | ascii顺序排列 |
head -n5 /etc/passwd |sort -t: -k3 -n | 以:分隔的第三段以纯数字排序 |
head -n5 /etc/passwd |sort -t: -k3,5 -r | 表示从第3到第5区域间的字符串反向排序 |
uniq | |
-c | count统计重复的行数 |
sort testb.txt |uniq | |
sort testb.txt |uniq -c | |
tee | 重定向 “>” +显示在屏幕 |
echo "aaaa" |tee testb.txt | |
tr | translate替换 |
-d | delete删除某个字符,-d 后面跟要删除的字符 |
-s | 把重复的字符去掉 |
head -n2 /etc/passwd |tr '[a-z]' '[A-Z]' | 替换为大写 |
grep 'root' /etc/passwd |tr 'r' 'R' | r替换为R |
split | 切割文档 |
-b | 依据大小切割 byte |
-l | 依据行数切割 |
split -b500 passwd | 500byte大小分割 |
split -b500 passwd 123 | 以123开头命名500byte分割 |
split -l10 passwd | 10行一个文件 |
grep [-cinvABC] 'word' filename | |
-c :count打印符合要求的行数 | |
-i :忽略大小写 | |
-n :number在输出符合要求的行的同时连同行号一起输出 | |
-v :打印不符合要求的行 | |
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行 | |
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行 | |
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行 | |
grep -A2 'halt' /etc/passwd | 把包含 ‘halt’ 的行以及这行下面的两行都打印出 |
grep -B2 'halt' /etc/passwd | 把包含 ‘halt’ 的行以及这行上面的两行都打印出 |
grep -C2 'halt' /etc/passwd | 把包含 ‘halt’ 的行以及这行上面和下面的各两行都打印出 |
grep -n 'root' /etc/passwd | 过滤出带有某个关键词的行并输出行号 |
grep -nv 'nologin' /etc/passwd | 过滤不带有某个关键词的行,并输出行号 |
grep '[0-9]' /etc/inittab | 过滤出所有包含数字的行 |
grep -v '[0-9]' /etc/inittab | 过滤出所有不包含数字的行 |
grep -v '^#' /etc/inittab | 把所有以 ‘#’ 开头的行去除 |
grep -v '^#' /etc/crontab |grep -v '^$' | 去除所有空行和以 ‘#’ 开头的行 |
“^” 表示行的开始, “$” 表示行的结尾,那么空行则可以用 “^$” 表示 | |
grep '^[^a-zA-Z]' test.txt | 过滤除a-Z开头 |
grep '[^a-zA-Z]' test.txt | 过滤含有除a-Z |
grep 'r..o' /etc/passwd | .为任意一个字符 |
grep 'ooo*' /etc/passwd | 包含0个或一个o,即‘ooo*’ 表示oo, ooo, oooo ... 或者更多的 ‘o’ |
grep '.*' /etc/passwd |wc -l | ‘.*’ 表示零个或多个任意字符,空行也包含在内 |
grep 'o\{2\}' /etc/passwd | 包含有两个o 的行 |
egrep 'o+' test.txt | 筛选一个或一个以上前面的字符 |
egrep 'oo+' test.txt | 筛选一个或一个以上前面的字符 |
egrep 'ooo+' test.txt | 筛选2个或2个以上前面的字符 |
egrep 'o?' test.txt | 筛选零个或一个前面的字符 |
egrep 'ooo?' test.txt | 筛选2个或2个以上前面的字符 |
egrep 'oooo?' test.txt | 筛选3个或4个以上前面的字符 |
egrep 'aaa|111|ooo' test.txt | 筛选字符串1或者字符串2或字符串3 |
egrep 'r(oo|at)o' test.txt | 筛选rooo或roat |
sed | |
-e<script>或--expression=<script>:以选项中的指定的script来处理输入的文本文件; | |
-f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件; | |
-h或--help:显示帮助; | |
-n或--quiet或——silent:仅显示script处理后的结果; | |
-V或--version:显示版本信息。 | |
sed -n 'n'p filename | 第n行print到桌面 |
sed -n '1,$'p test.txt | 1到结尾行 |
sed -n '1,3'p test.txt | 1到3行 |
sed -n '/root/'p test.txt | 包含root行 |
sed -n '/^1/'p test.txt | 以1开头的行 |
sed -n '/in$/'p test.txt | 以in结尾的行 |
sed -n '/r..o/'p test.txt | 包含r..o内容的行 |
sed -n '/ooo*/'p test.txt | 包含两个oo以上连续的行 |
sed -e '1'p -e '/111/'p -n test.txt | 第一行和包含111的行 |
sed '1'd test.txt | 删除第一行 |
sed '1,3'd test.txt | 删除第1到第3行 |
sed '/oot/'d test.txt | 删除含oot的行 |
sed '1,2s/ot/to/g' test.txt | 第一行到第二行ot替换为to |
‘s’ 就是替换的命令, ‘g’ 为本行中全局替换,如果不加 ‘g’ 只换该行中出现的第一个 | |
sed 's#ot#to#g' test.txt | ot替换为to |
除了可以使用 ‘/’ 作为分隔符外,还可以使用其他特殊字符例如 ‘#’ 或者 ‘@’ 都没有问题 | |
sed 's/[0-9]//g' test.txt | 删除文档所有数字 |
sed 's/[a-zA-Z]//g' test.txt | 删除文档所有字母 |
sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/' test.txt | 调换两个字符串的位置 |
sed 's/^.*$/123&/' test.txt | 行首增加123 |
sed -i 's/ot/to/g' test.txt | 直接修改文件的内容 |
练习 | |
1. /bin/cp /etc/passwd /root/test.txt ; sed -n '1,$'p test.txt | 把/etc/passwd 复制到/root/test.txt,用sed打印所有行 |
2. sed -n '3,10'p test.txt | 打印test.txt的3到10行 |
3. sed -n '/root/'p test.txt | 打印test.txt 中包含 ‘root’ 的行 |
4. sed '15,$'d test.txt | 删除test.txt 的15行以及以后所有行 |
5. sed '/bash/'d test.txt | 删除test.txt中包含 ‘bash’ 的行 |
6. sed 's/root/toor/g' test.txt | 替换test.txt 中 ‘root’ 为 ‘toor’ |
7. sed 's#sbin/nologin#bin/login#g' test.txt | 替换test.txt中 ‘/sbin/nologin’ 为 ‘/bin/login’ |
8. sed '5,10s/[0-9]//g' test.txt | 删除test.txt中5到10行中所有的数字 |
9. sed 's/[^0-9a-zA-Z]//g' test.txt | 删除test.txt 中所有特殊字符(除了数字以及大小写字母) |
10. sed 's/\(^[a-zA-Z][a-zA-Z]*\)\([^a-zA-Z].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)/\4\2\3\1/' test.txt | 把test.txt中第一个单词和最后一个单词调换位置 |
11. sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)#\1\5\3\4\2#' test.txt | 把test.txt中出现的第一个数字和最后一个单词替换位置 |
12. sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*$\)#\1\3\2#' test.txt | 把test.txt 中第一个数字移动到行末尾 |
13. sed '20,$s/^.*$/aaa:&/' test.txt | 在test.txt 20行到末行最前面加 ‘aaa:’ |
head -n2 /etc/passwd |awk -F ':' '{print $1}' | 截取文档中以:分隔的第一段 |
head -n2 test.txt |awk -F':' '{print $0}' | 打印整行 |
head -n2 test.txt |awk -F':' '{print $1"#"$2"#"$3"#"$4}' | 打印1#2#3#4 |
awk '/oo/' test.txt | |
awk -F ':' '$1 ~/oo/' test.txt | |
8月18日上课笔记
最新推荐文章于 2022-09-25 22:06:01 发布