Linux的shell编程中,如何将一段字符串进行截取?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的shell编程中,如何将一段字符串进行截取?相关的知识,希望对你有一定的参考价值。

比如我有这样一个变量
var=`dmesg | grep eth`
得到的结果有很多行 如下:
r8169 0000:01:00.0: eth0: RTL8168evl/8111evl at 0xf8a6c000, 00:e0:b4:08:4c:cf, XID 0c900800 IRQ 27
r8169 0000:01:00.0: eth0: jumbo features [frames: 9200 bytes, tx checksumming: ko]
r8169 0000:02:00.0: eth1: RTL8168evl/8111evl at 0xf8a70000, 00:e0:b4:08:4c:d0, XID 0c900800 IRQ 28
r8169 0000:02:00.0: eth1: jumbo features [frames: 9200 bytes, tx checksumming: ko]
r8169 0000:01:00.0: eth0: unable to load firmware patch rtl_nic/rtl8168e-3.fw (-2)
我只想得到00:e0:b4:08:4c:cf并赋值到另一个变量中 如何做

简单介绍下Shell字符串截取的详细方法,如截取指定字数、按指定的字符串截取、按指定要求分割。

一、Linux shell 截取字符变量的前8位,有方法如下:

二、按指定的字符串截取
1、第一种方法:
$varible##*string 从左向右截取最后一个string后的字符串
$varible#*string从左向右截取第一个string后的字符串
$varible%%string*从右向左截取最后一个string后的字符串
$varible%string*从右向左截取第一个string后的字符串
“*”只是一个通配符可以不要

三、按照指定要求分割:
比如获取后缀名

参考技术A 是说得到包含00:e0:b4:08:4c:cf的行吗
newvar=`echo $var | grep "00:e0:b4:08:4c:cf"`
如果只想得到00:e0:b4:08:4c:cf,grep加-o参数
newvar=`echo $var | grep -o "00:e0:b4:08:4c:cf"`
参考技术B 使用grep
还可结果awk本回答被提问者采纳

Linux Shell脚本编程--cut命令

 

cut

cut命令可以从一个文本文件或者文本流中提取文本列。

cut语法

[[email protected] ~]# cut -d‘分隔字符‘ -f fields <==用于有特定分隔字符
[[email protected] ~]# cut -c 字符区间            <==用于排列整齐的信息
选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间;

 

PATH 变量如下

[[email protected] ~]# echo $PATH
/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
# 1 | 2       | 3   | 4       | 5            | 6            | 7

 

将 PATH 变量取出,我要找出第五个路径。

#echo $PATH | cut -d ‘:‘ -f 5
/usr/local/bin

 

将 PATH 变量取出,我要找出第三和第五个路径。

#echo $PATH | cut -d ‘:‘ -f 3,5
/sbin:/usr/local/bin

 

将 PATH 变量取出,我要找出第三到最后一个路径。

echo $PATH | cut -d ‘:‘ -f 3-
/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games

 

将 PATH 变量取出,我要找出第一到第三个路径。

#echo $PATH | cut -d ‘:‘ -f 1-3
/bin:/usr/bin:/sbin:
 

 

将 PATH 变量取出,我要找出第一到第三,还有第五个路径。

echo $PATH | cut -d ‘:‘ -f 1-3,5
/bin:/usr/bin:/sbin:/usr/local/bin

 

实用例子:只显示/etc/passwd的用户和shell

#cat /etc/passwd | cut -d ‘:‘ -f 1,7 
root:/bin/bash
daemon:/bin/sh
bin:/bin/sh

以上是关于Linux的shell编程中,如何将一段字符串进行截取?的主要内容,如果未能解决你的问题,请参考以下文章

Linux Shell脚本编程--cut命令

Linux Shell脚本编程--cut命令

如何将一shell脚本中的每一步命令执行结果输出到指定日志文件中

Shell编程

linux命令(12)cut

如何将一段字符串连接成一个字符串?