cut 命令的作用是对文本中的内容进行截取。
一个文件里边有很多数据, grep 命令是用来提取文本内容包含匹配规则的行,而 cut 命令是用来截取文本内容中的列数据。
使用如下文本:
使用 cut 命令提取studenttxt文本中的第二列信息
如果只需要第二列信息,且不需要标题,就需要结合前边说的 grep 命令一起使用了。
如果想要提取文本中多列数据,只要将列号直接用 , (逗号)分开即可,命令如下:
cut 命令可以按照字符进行提取,需要注意 8- 代表的是提取所有行的第十个字符开始到行尾,而
10-20 代表提取所有行的第10个字符到第20个字符,而 -8 代表提取所有行从行首到第8个字符。
例如:以 : 作为分隔符,提取 /etc/passwd 文件中,普通用户的第一列和第三列数据信息。
需要先过滤掉伪用户和root用户,在切割提取。
之后我们就可以把这些提取出来的数据,传入变量中,然后该变量就可以在程序中进行 *** 作了。
cut 命令默认分隔符是制表符(tab键),而不是使用空格来进行分隔,因为 cut 命令不识别空格作为分隔符。
如果有特定的符号,也是可以用 -d 选项进行指定做为分隔符。
而空格不推荐作为 cut 命令的分隔符。
如查看磁盘情况的 df 命令:
这个命令中间的分隔就是空格。
如我们通过 cut 命令获取二列信息,如下:
我们看到 cut 命令默认是不识别空格作为分隔符的。
如果我们用 -d 选项指定空格作为分隔符,如下:
可以看到获取的是一列空格,也非常的不好用。
所以不推荐空格作为 cut 命令的分隔符。
sed -n '/pattern/p' file_name |sed -n 7,12p
#pattern是你要查的内容
#file_name是你要查的文件
以上实现:打印出匹配结果中的7-12行
sed -n '/pattern/{7,12p}' file_name
以上实现将文件中7到12行中匹配的数据显示出来
代码如下:
str="/home/gateman"
if [ ${str:0:1} = "/" ]; then
echo "yes'
fi
${str:0:1} 中0表示从第几个字符开始,1表示截取多长。
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
扩展资料
Linux shell 截取字符变量的前8位:
实现方法有如下几种:
expr substr “$a” 1 8
echo $a|awk ‘{print substr(,1,8)}’
echo $a|cut -c1-8
echo $
expr $a : ‘\(\\)’
echo $a|dd bs=1 count=8 2>/dev/null
按照指定要求分割:
比如获取后缀名
ls -al | cut -d “” -f2
小结:shell对应字符串的处理方法很多,根据需求灵活选择。
在做shell批处理程序时候,经常会涉及到字符串相关 *** 作。有很多命令语句,如:awk,sed都可以做字符串各种 *** 作。 其实shell内置一系列 *** 作符号,可以达到类似效果,大家知道,使用内部 *** 作符会省略启动外部程序等时间,因此速度会非常的快。
一,正则表达式
w匹配数字、字母、下划线
egrep "roow" user //找roo后面是数字、字母、下划线的字符串
s 匹配空格、tab键
egrep "roos" user //找roo后面是1个空格或者tab键打出来的空格的字符串,如果没有
就不输出
二,sed其他指令
a行下追加 i行上添加 c替换整行
sed 'a 666' user //所有行的下面追加666
sed '1a 666' user //第1行的下面追加666
sed '/^bin/a 666' user //在以bin开头的行的下面追加666
sed 'i 666' user //所有行的上面添加666
sed '5i 666' user //第5行的上面添加666
sed '$i 666' user //最后1行的上面添加666
sed 'c 666' user //所有行都替换成666
sed '1c 666' user //替换第1行为666
---------------------------------------------------------
三,awk
可以实现精确搜索并输出 ,逐行处理
1,前置指令 | awk 选项 条件 指令
2,awk 选项 条件 指令 被处理文档
选项 -F 定义分隔符
指令 print
条件 /字符串/
内置变量 第一列 第二列 第三列
四,awk的条件 所有列 NR行号 NF 列号
[root@proxy opt]# cat abctxt //准备素材
hello the world
welcome to beijing
awk '{print}' abctxt //输出所有
awk '/to/{print}' abctxt //输出有to的那行
awk '{print $2}' abctxt //输出所有行的第2列
awk '/to/{print $1}' abctxt //输出有to的那行的第1列
awk '{print $0}' abctxt //输出所有行所有列
awk '{print $0,$1}' abctxt //输出所有行所有列和第1列
awk '{print NR}' abctxt //输出所有行的行号
awk '{print NR,$0}' abctxt //输出所有行的行号,所有列
awk '{print NR,NF}' abctxt //输出所有行的行号,列号(有几列)
awk '/^bin/{print NR}' user //找以bin开头的行,显示该行的行号
awk '/^bin/{print NR,$0}' user //找以bin开头的行,显示该行的
行号,所有列
awk '{print NF}' user //输出所有行的列号(每行有几列)
awk -F: '{print $1}' user //文档中如果没有空格,可以用F修改分
隔符
awk -F: '{print $1,$6}' user //使用冒号作为列的分隔符,显示
第1、6列
awk -F: '{print $1" 的家目录是 "$6}' user //还可以输出常量,加
双引号即可
awk -F: '{print $1" 的解释器是 "$7}' user
收集根分区剩余容量
df -h | awk '//$/{print $4}' //使用df -h 作为前置指令交给awk处理
找到以/结尾的行,并输出第4列
df -h | awk '//$/{print "根分区剩余容量是"$4}' //然后加常量输出
收集网卡流量信息
ifconfig eth0 | awk '/RX p/{print "eth0网卡接收的数量量是"$5}'
ifconfig eth0 | awk '/TX p/{print "eth0网卡发送的数量量是"$5}'
------------------------------------------------------------
1,/字符串/ 还可以使用正则 ~ 包含 !~不包含
2,使用数字或者字符串
awk -F: '$6~/root/{print}' user //输出第6列包含root的行
awk -F: '$6~/bin/{print}' user //输出第6列包含bin的行
awk -F: '$6!~/bin/{print}' user //输出第6列不包含bin的行
3,逻辑组合 &&并且 ||或者
== != > >= < <=
awk -F: '$3<3{print}' user //输出第3列小于3的行
awk -F: '$3<=3{print}' user //输出第3列小于等于3的行
awk -F: 'NR==2{print}' user //输出第2行
awk -F: 'NR>2{print}' user //输出行号大于2的行
4,运算
awk -F: 'NR==2||NR==4{print}' user //找行号是2或者4的行
awk -F: 'NR==2||NR==40{print}' user //如果只有一个条件满足就显示一个
awk -F: '$7~/bash/&&$3<=500{print}' user //找第7列包含bash并且第3列
小于等于500的行
awk 'NR==2&&NR==4{print}' user //找行号既是2又是4的行,不存在,无输出
awk -F: '$7~/bash/&&NR<=3{print}' user //找第7列包含bash并且行号是1~3的
awk -F: '$7~/bash/||NR<=3{print}' user //找第7列包含bash或者行号是1~3的
awk -F: '$1~/root/' user //找第1列包含root的行
如果有用户叫root6,也会搜到,比较宽松的搜索方式,如果
任务就是{print}的话可以省略不写
awk -F: '$1=="root"' user //找第1列完全等于root的行
多一个字符少一个字符都不行,比较严格的搜索方式
五,awk处理时机,可以执行额外任务
awk 'NR%2==0{print NR,$0}' user //在条件中使用运算
,找到将行号除以2余数等于0的行,然后输出该行的
行号和所有列,相当于输出偶数行
-----------------------------------------------------
利用awk处理时机,输出下列内容
BEGIN任务 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
END任务 执行1次,读取文档之后执行
BEGIN{ 任务1 }{ 任务2 }END{ 任务3 }
awk -F: 'BEGIN{print "ok"}{print $1}END{print "ok"}' user
awk 'BEGIN{print NR}{print NR}END{print NR}' user
awk 'BEGIN{print "User UID Home"}' //第1步输出表头信息
awk -F: '{print $1" "$3" "$6}' user //第2步输出内容
awk 'END{print "总计"NR"行" }' user //第3步输出结尾
awk -F: 'BEGIN{print "User UID Home"}{print $1" "$3" "$6}END{print "总计"NR"行"}' user //合在一起写
---------------------------------------------------------------------------
使用awk统计网站访问量
setenforce 0 //关闭selinux
systemctl stop firewalld //关闭防火墙
systemctl restart >
以上就是关于【现学现忘&Shell编程】— 30.cut列提取命令全部的内容,包括:【现学现忘&Shell编程】— 30.cut列提取命令、bash shell脚本,如何用sed 命令打印出匹配行和匹配行的第N行、Linux:用shell如何实现读取一个字符串的第n个字符呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)