shell字符串截取总结 |
您所在的位置:网站首页 › linux如何用脚本截取字符串中的数字 › shell字符串截取总结 |
shell中截取字符串的方法有很多中,本人对其中几种常用的进行整理总结。 0x01、grep 在文件中搜寻字符串匹配的行并输出 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 grep 【选项】【指定字串】【文件】 -i 不区分大小写 -v 排除指定字串 -c:只输出匹配行的计数。 -n:显示匹配行及 行号。 -s:不显示不存在或无匹配文本的错误信息。 grep支持正则表达式,下面总结下正则表达式和通配符。 正则表达式 正则表达式用来在文件中匹配符合条件的字符串,正则表达式是包含匹配。grep、awk、sed等命令可以支持正则表达式。 通配符 通配符用来匹配符合条件的文件名,通配符是完全匹配,ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配。
正则有些符号和通配符有些符号通用,但含义完全不同
基础正则表达式 元字符 作用 * 前一个字符匹配0次或任意多次 . 匹配除了换行符外任意一个字符 ^ 匹配行首。如^hello会匹配以hello开头的行 $ 匹配行尾,如hello会匹配以hello结束的行 [] 匹配中括号中任意的一个字符,只匹配一个字符。 [^] 匹配除中括号的字符以外的任意一个字符。如[^0-9]匹配任意一个非数字字符 \ 转义符。用于取消特殊符号的含义 {n} n是一个非负数,匹配前面的字符恰好出现n次。如o{2}匹配food中的两个o {n,} 表示其前面的字符出现不少于n次 {n,m} 最少匹配n次且最多匹配m次 需要注意的是,通配符的*表示任意字符,而正则表达式的*是匹配钱一个字符0次或者任意多次 grep "s*" anaconda-ks.cfg 显示的不是包含有s的行,而是显示了整个文件,“s*”匹配s的0次或多次 grep提取行,cut和awk提取列
0x02、cut cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的 cut[选项] 文件名 -f列号提取第几列 -d分隔符按照指定分隔符分割列(默认使用的是制表符tab键) cut命令的局限线 cut命令对于空格符分割,不能很好的提取,可以使用awk命令解决 0x03、awk 和cut命令作用一样,截取符合条件的列,grep是截取符合条件的行,但cut有些局限,awl也可以通过制表符,冒号等分隔符截取,功能远比cut强大,但awk是一个非常复杂的命令,不但可以实现字符串的截取,还可以在awk命令中进行编程调用,最常见的可以进行函数,判断等。所以把awk一直说是awk编程。但仅仅是简单的截取列,又不是用空格作分割的话,cut命令更简单。
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk ‘条件1{动作1}条件2{动作2}...’文件名 条件 一般使用关系表达式作为条件 x>10判断变量x是否大于10 x>=10大于等于 x |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |