henryzhou
Make robot converse with human naturally
Bash学习笔记
Bash学习
- history命令会列出记录的所有bash命令
- !number:执行.bash_history文件中第n条命令
- !!:执行上一条命令
- !command:执行以command开头的最近的一条命令
- bash下组合按键
- ctrl+C:终止目前的命令
- ctrl+D:输入结束(EOF)
- ctrl+Z:暂停目前的命令
- 通配符
- *:代表0到无穷多个任意字符
- ?:代表一定有一个任意字符
- []:代表一定有一个在中括号内的字符(非任意字符),例如[abcd],代表一定有一个字符,可能是a,b,c,d这四个中任意一个
- [-]:若有减号在中括号内,代表在编码顺序内的所有顺序,例如[0-9]代表0到9之间的所有数字
- [^]:若中括号内的第一个字符为指数符号^,那表示原向选择,例如[ ^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受的意思
- bash其他符号
- #:注释符号,后面内容不执行
- \:转移符号
-
- ~:用户的主文件夹
- ;:连续命令执行分隔符
- $:变量前导符
- &:作业控制,将命令变成背景下工作
- !:逻辑运算符非
- /:目录符号
- >,»:数据流重定向,分别是“替换”和“累加”,1>表示输出正确信息,2>表示输出错误信息,同时输出则为2>&1
- <,«:数据流重定向,输入导向
- ``:两个反单引号中间为先执行命令,也可使用$()
- 数据管理命令
- cut:对于比较规整的信息,cut可以截取每一行特定部分的字符
- grep:对输出结果进行查询筛选
- sort:对输入内容进行排序
- uniq:对输入去重的操作
- wc:对输入进行统计计数
- tee:同时将数据屏幕输出和保存到文件
- xargs:将输入通过空格符或者断行符分开作为参数
- -的用途:有些命令需要用到文件名作为参数,可以用-代指srdout和stdin输出的文件名
- 正则表达式
- 字符集
- [:alnum:]:代表英文大小写字符及数字,即0-9,A-Z,a-z
- [:alpha:]:代表任何英文大小写字符,即A-Z,a-z
- [:blank:]:代表空格键与[Tab]按键
- [:cntrl:]:代表键盘上面的控制按键,即包括CR,LF,Tab,Del等
- [:digit:]:代表数字字符,即0-9
- [:graph:]:除了空格符(空格键与[Tab]按键)外的其他所有按键
- [:lower:]:代表小写字符,即a-z
- [:print:]:代表任何可以被打印出来的字符
- [:punct:]:代表标点符号
- [:upper:]:代表大写字符,即A-Z
- [:space:]:任何会产生空白的字符,包括空格键[Tab]CR等
- [:xdigit:]:代表十六进制的数字类型,因此包括0-9,A-F,a-f等
- 基础字符表达式与应用
- .:代表一定有一个任意字符
- *:代表重复前一个0到无穷次
- ^word:待查找的字符串在行首
- word$:待查找的字符串在行尾
- [list]:从字符集合的RE字符里面找出想要选取的字符
- [^list]:从字符集合的RE字符里面中找出不要的字符串或范围
- [n1-n2]:从字符集合的RE字符里面找出想要选取的字符范围
- [^$]:指定空白行
- \{n1,n2\}:连续n到m个的前一个RE字符,若为\{n}则是连续n个的前一个RE字符,若为\{n,}则是连续n个以上的前一个RE字符
- 扩展的正则表达式
- +:重复一个或者一个以上的前一个RE字符
- ?:零个或者一个的前一个RE字符
-
- ():找出”组“字符串
- ()+:多个重复组的判别
- sed命令
- 作用:sed本身是一个管道命令,可以分析stdin,还可以将数据进行替换、删除、新增、选取特定行的功能
- 语法:sed [n1] [n2] function;function选项如下所示
- a:新增,a后面可以接字符串,而这些字符串会在新的一行中出现
- c:替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行
- d:删除,因为是删除,所以d后面通常不接任何参数
- i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现
- p:打印,也就是将某一个选择的数据打印出来,通常p会与sed -n一起运行
- s:替换,可以直接进行替换的工作,通常这个s的动作可以搭配正则表达式,例如1,20s/word1/word2/g,即将1到20行中word1替换成word2
- 文件比较工具
- diff [-bBi] from-file to-file:比较from-file和to-file的差别,注意不要用diff命令去比较不相干的文件,这样没有比较的结果
- cmp [-s] file1 file2:比较file1和file2,返回第一个发现的不同点字节处和行数