Linux Bash Shell字符串抽取、按列合并和格式化输出

简介:

需求来源:默认的ip link show命令输出会输出系统中已经存在的网卡(包括虚拟网卡)的名称、MAC地址、端口状态等信息,但也夹杂着一些无用的信息,此次的字符串操作就是将这些信息中的网卡名称、MAC地址、端口状态取出来。

涉及到的知识包括:常用的字符串的处理工具awk、sed、cut等的用法,paste按列合并,printf格式化输出等。

例如原输出信息为:

image

现在要把上图中红色框内的信息全部提取出来,但难点在于ip link show命令的默认输出会将MAC地址打印在下一行,导致普通的awk操作无法按照列提取。

但办法总是有的:

方法1:使用awk,借助if else判断,数字开头的行取所需的列,不是数字开头的行输出所需的列,一起打印出来就会得到所需要的结果。

1
ip link show |  awk  '{if($0~/^[0-9]+:/)printf( "%-15s%-15s",$2,$9);else print $2}'

image

方法2:使用awk或cut,将每一行中所需的列提取出来,再将这些列按照列合并起来(但此种方法繁琐,而且格式化输出不容易,需要最后格式化输出)。

1
2
3
4
5
6
7
INTERFACE_NAME=`ip link show |  grep  ^[1-90-9] |  cut  -d  ":"  -f 2`   
MAC_ADDRESS=`ip link show |  grep  - v  ^[1-90-9] |  cut  -d  " "  -f 6`    
STATE=`ip link show |  grep  ^[1-90-9] |  cut  -d  " "  -f 9`
temp=` paste  <( echo  "$INTERFACE_NAME" ) <( echo  "$MAC_ADDRESS" )`
paste  <( echo  "$temp" ) <( echo  "$STATE" )
temp2=` paste  <( echo  "$temp" ) <( echo  "$STATE" )`
echo  "$temp2"  |  awk  '{printf("%-15s%-20s%-15s\n",$1,$2,$3)}'

image

方法3:将ip link show命令输出格式化,将MAC地址打印在同一行。

image

使用ip的-o参数,将输出控制在同一行。参数等同于“-oneline”,意思就是同一行,解释如下图所示,早已经考虑好了,这种设计实在令人唏嘘不已!

“output each record on a single line, replacing line feeds with the ’\′ character. This is convenient when you want to count records with wc(1) or to grep(1) the output.”

--END--


本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1611783,如需转载请自行联系原作者


相关文章
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
1132 2
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
513 16
|
存储 Shell Linux
Linux|创建和使用 Bash 别名
Linux|创建和使用 Bash 别名
|
Linux Python Perl
Linux命令删除文件里的字符串
Linux命令删除文件里的字符串
542 8
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
JavaScript 关系型数据库 Shell
Linux shell编写技巧之随机取字符串(一)
本文介绍了Linux Shell脚本的编写技巧,包括环境配置、变量命名规则和缩进语法,并提供了一个实例练习,展示如何使用`$RANDOM`变量和`md5sum`命令来生成随机的8位字符串。
467 4
|
Unix Shell Linux
在Linux中,什么是 BASH?
在Linux中,什么是 BASH?
|
Linux Perl
Linux进行文件字符串替换
【8月更文挑战第5天】Linux进行文件字符串替换
1800 3
|
Linux PHP
linux查找指定目录下包含指定字符串文件,包含子目录
linux查找指定目录下包含指定字符串文件,包含子目录
322 1
|
Shell Linux
在Linux中,哪⼀个bash内置命令能够进行数学运算?
在Linux中,哪⼀个bash内置命令能够进行数学运算?