Error[8]: Undefined offset: 19, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

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个字符呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
【现学现忘&amp;Shell编程】— 30.cut列提取命令_框架_内存溢出

【现学现忘&amp;Shell编程】— 30.cut列提取命令

【现学现忘&amp;Shell编程】— 30.cut列提取命令,第1张

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个字符呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9796531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存