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

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

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

例如原输出信息为:

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

但办法总是有的:

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

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

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

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)}‘

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

使用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--

时间: 2024-10-14 03:33:20

Linux Bash Shell字符串抽取、按列合并和格式化输出的相关文章

&lt;LINUX &gt;bash shell 入门 --linux学习笔记

首先说下我个人对于shell的理解,我觉得shell是一种通过各种控制语句将linux命令进行集合实现批处理的一种脚本语言. shell编程入门其实很简单,语法知识并不多,但是高级shell编程就很难,因为shell是用户和linux之间的桥梁,要编写高质量的shell脚本,就需要用户对linux有很全面的认识. 这里我们只分析shell脚本的语法知识,如想透彻的学习linux还需多努力. shell结构       1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建she

linux bash shell中for的用法and示例

关于linux bash shell中的for语句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用法.文中任何错误希望大佬们一一指出,不胜感激. bash shell中提供了for命令,用于创建通过一系列值重复的循环,每次重复使用系列中的一个值执行一个定义的命令集. for语句的基本格式如下: for---in list do commands done 在参数list中提供一系列用于迭代(上一

Linux - Bash shell的功能;内建命令type

命令编修能力 (history): bash 的功能里头,相当棒的一个就是『他能记忆使用过的命令!』 这功能真的相当的棒!因为我只要在命令列按『上下键』就可以找到前/后一个输入的命令!而在很多 distribution 里头,默认的命令记忆功能可以到达 1000 个!也就是说, 你曾经下达过的命令几乎都被记录下来了. 这么多的命令记录在哪里呢?在你的家目录内的 .bash_history 啦! 不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一

Linux Bash Shell编程快速入门

BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     最简单的例子 -- Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH. 用 vi 编辑器编辑一个 hello 文件如下: #!/bin/bash# This is a very simple

Linux Bash Shell入门教程

BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     最简单的例子 -- Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH. 用 vi 编辑器编辑一个 hello 文件如下: #!/bin/bash # This is a very simple

linux BASH shell下设置字体及背景颜色

BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字符的显示颜色改为黑色 \e[31m 将字符的显示颜色改为红色 \e[32m 将字符的显示颜色改为绿色 \e[33m 将字符的显示颜色改为淡红色 \e[34m 将字符的显示颜色改为蓝色 \e[35m 将字符的显示颜色改为紫色 \e[36m 将字符的显示颜色改为淡蓝色 \e[37m 将字符的显示颜色改为灰色 \e[40m -- \e[47m 设置背景色 \e[40m 将背景色设

linux bash shell 流程控制(if/else )

本文转自:http://blog.csdn.net/flowingflying/article/details/5069646 本文也即<Learning the bash Shell>3rd Edition的第五章Flow Control之读书笔记,但我们将不限于此.flow control是任何编程语言中很常用的部分,也包括了bash.在这里,我们将学习他们. if/else是通过判断选择执行或者执行部分代码,可以根据变量.文件名.命令是否执行成功等很多条件进行判断,他的格式如下: if 

零基础学习云计算及大数据DBA集群架构师【Linux Bash Shell编程及系统自动化2015年1月20日周三】

老师讲的所有实验记录 1.写一个脚本,判断用户是否存在,如果存在则删除.若不存在,就提示不存在. 2.三个数字比大小,输出最大的 3.三个数字比大小,并且按从大到小排列 4.画斜线正反 5.达到如下效果 * *** ***** ******* ********* 6.写一个9*9乘法表 7.画一个平行四边形 8.连乘算法 while和until 9.要求根据userlist创建用户,要求指定用户名,用户id,用户的附加组及变更用户u密码,若对应用户的附加组不存在,则将附加组创建出来后再根据要求添

【Linux】shell字符串分割、数组访问、条件判断

参考资料: shell字符串分割再循环:http://www.shangxueba.com/jingyan/1633455.html linux shell中 if else以及大于.小于.等于逻辑表达式介绍:http://www.jb51.net/article/34332.htm Shell数组:shell数组的定义.数组长度:http://c.biancheng.net/cpp/view/7002.html shell 数组长度:http://blog.csdn.net/shaobingj