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次 |
1
2
|
需要注意的是,通配符的*表示任意字符,而正则表达式的*是匹配钱一个字符0次或者任意多次
grep "s*" anaconda-ks.cfg 显示的不是包含有s的行,而是显示了整个文件,“s*”匹配s的0次或多次
|
1
|
grep "size*" anaconda-ks.cfg匹配了e的0次或多次,但至少需匹配siz字符串
|
1
|
“.”匹配除了换行符外任意一个字符,和通配符的?相同,“.*”就才和通配符中的“*”作用相同
|
grep提取行,cut和awk提取列
0x02、cut
cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的
cut[选项] 文件名
-f列号提取第几列
-d分隔符按照指定分隔符分割列(默认使用的是制表符tab键)
1
|
和grep结合使用,cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
|
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<=10小于等于
动作
格式化输出
流程控制语句
$1代表第一列,$2代表第二列,$0代表整一行
FS内置变量
1
2
|
awk '{FS=":"}{print $1"\t" $3}' /etc/passwd,使用FS=””,指定分割符,第一行已经读完,用冒号分割已经来不及了,默认的用空格分割,后面的用冒号分割,在
FS之前强制加个BEGIN
|
关系运算符
1
|
cat /etc/passwd | awk '{FS=":"} $3>=500 {printf $1"\n"}'
|
0x04、printf
printf是在awk中的标准输出格式
printf ‘输出类型输出格式’输出内容
输出类型:
%ns:输出字符串,n是数字指代输出几个字符
%ni:输出是整数,n是数字指代输出几个数字
%m.nf:输出浮点数。m和n是数字,指代输出的整数位数和小数位数。加%8.2f代表共输出8位数,其中2位是小数,6位是整数。
输出格式:
\a:输出警告声音
\b:输出退格符,也就是backspace键
\f:清楚屏幕
\n:换行
\r:回车,也就是Enter键
\t:水平输出退格键,也就是Tab键
\v:垂直输出退格键,也就是Tab键
在awk命令的输出中支持print和printf命令
print:print会在每个输出之后自动加入一个换行符(linux默认没有print命令)
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符。
0x05、sed
sed是一种几乎包括在所有unix平台(包括linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
vim也可以进行选取,删除,替换等,但是vim只能对文件进行修改,但是不可以直接对命令的结果进行修改,需先把命令保存到文件中,再对文件进行修改。而sed可以从管道符接收数据进行修改
sed [选项] ‘[动作]’文件名
常见选项
-n一般sed命令会把所有数据都输出到屏幕,加入此参数,则只会把经过sed命令处理的行输出到屏幕
-e允许对输入数据应用多条sed命令编辑
-i用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a\:追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
c\:行要用\”代表数据为完结。
替换,用c后面的字符串替换原来数据行,替换多行时,除最后一行外,每行末尾需i\:插入,在当前行前插入一行或多行,插入多行时,除最后一行外,每行末尾需要用\”代表数据为完结。
d:删除,删除指定的行。
p:输出、打印指定的行。
s:字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)。
1
2
|
sed -n "1p" /etc/passwd ,查看etc/passwd中的第一行,如果不加-n参数,显示这条操作外,还会显示文件的全部内容,加-n
只会显示处理的行
|
1
|
sed "2,36d" /etc/passwd ,删除第二行到第四行的数据,但不修改文件本身,只有加了-i参数才会修改文件本身
|
动作a和i都是添加,a是追加在行尾,i是插入在行前,但不都会修改文件本身,只会先显示上做修改,不加-n 除了虎显示修改的数据,还会显示文本的所有数据。
动作c和动作s都是进行替换,c进行的是行的替换,s进行的是字符串的替换,字符替换的格式是sed “s/旧字符串/新字符串/g”文件名,在s前指定行只需改指定的行,不指定会修改所有的。
0x06、sort 排序命令
sort 【选项】 文件名
选项
-f忽略大小写
-n以数值型进行排序,默认使用字符串排序
-r反向排序
-t指定分隔符,默认使用的是制表符tab键
-k n[,m]按照指定的字段范围排序,从第n字段开始,m字段结束,不加m默认到行尾
1
|
sort -t ":" -k 3,3 /etc/passwd,仔细看,没把uid当作字符串对待,而当数值型对待,需要加-n参数
|
shell字符串截取总结相关推荐
- shell字符串截取
shell 字符串截取方法 1.从第几个索引开始,截取到最后 2.从第几个索引开始,截取指定长度字符 3.从倒数第几个位置开始,截取到最后 4.从倒数第几个位置开始,截取指定长度字符 5.从左开始匹配 ...
- shell字符串截取方法
shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...
- Linux Shell字符串截取(非常详细):#左边开始截取、%右边开始截取、指定位置截取
演示 Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取. 从指定位置开始截取 这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串 ...
- Shell 字符串截取
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.co ...
- Linux Bash Shell字符串截取
#!/bin/bash #定义变量赋值时等号两边不能有空格,否则会报命令不存在 # 运行shell脚本两种方式 # 1.作为解释参数 /bin/sh test.sh ; 2.作为可执行文件 chmo ...
- linux shell字符串截取总结
一.字符串变量的截取操作 对字符串变量的截取操作一般都是通过${操作符}的方式进行,如下: 1.从指定位置(index)截取固定长度 格式:${string:start:length} 其中,stri ...
- Shell字符串截取——获取oracle group名字
业务背景,在执行oracle文件时,需要授权给相应文件,一边我们用chown -Roracle:oraclegroup xxx,不同服务器oraclegroup名字不相同,怎么样获取呢? 方法:首先, ...
- shell 字符串截取
使用#截取0以后的内容 #表示操作符,*0表示从左往右找到第一个0,截取0之后的所有字符 [root@localhost ~]# var=1234567890abcedef1203 [root@loc ...
- shell字符串截取掐头去尾操作
字符串的掐头去尾 字符串掐头(#用来删除头部,*通配) 从左向右,最短匹配删除 格式:echo ${变量名#*关键词} [root@ceshiji ~]# x=`head -1 /etc/passwd ...
最新文章
- ASP.NET MVC (五、HttpClient接口解析)
- 彩信编辑器之预览功能
- python语言与c语言相比在分支结构上有什么不同,python 基础教程之语法篇章——一小时入门python__对比python与C语言的语法异同...
- (62)Verilog HDL模块例化system Verilog模块
- 人生苦短之---第一个Python程序
- python之将python代码编译成.so
- Akka和Actor一起工作的消息《ten》译
- Hibernate(转载)
- 后基因组行为遗传学:从革命到常规(上)
- Freemarker 输出 $ 特殊符号
- python运算符用来计算集合并集的_Python 运算符中用来计算集合并集的是 _______ 。_学小易找答案...
- 大学计算机人工智能知识点,人工智能及其应用知识点整理
- java证书cert_java – 使用带有证书路径(cert chain)的bouncy...
- 归并排序 代码 + 讲解
- kubernetes监控检查(探针)
- excel连接mysql插件_Excel插件之连接数据数据库秒数处理,办公轻松化
- PV操作详解(附详细例题解析和总结)
- 2022最新个人发卡网站源码+支持傻瓜式安装/全开源的
- 嵌入式linux指令
- 蓝屏死机!Windows 7用户千万别装这个补丁
热门文章
- 日期格式化的“疑难杂症”
- 有关采用SMIv2 Internet协议的SNMPv2 MIB
- 香港科技园公司“牵手”腾讯 共推香港金融科技发展
- 1 2 5组合100,有多少种方法
- JavaScript中的面向对象
- 【Spring】BeanUtils.copyPorperties()的IllegalArgumentException原因分析
- 织梦根目录下面404页面,主页能正常运行404页面,切换至栏目页404页面内的图片不能正常显示,解决...
- miller_rabin_素性测试
- vsftp本地用户,虚拟用户,匿名用户同时工作
- 深入理解Blocks,Procs和lambdas