需求来源:默认的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--

转载于:https://blog.51cto.com/dgd2010/1611783

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

  1. Linux Bash Shell字符串截取

    #!/bin/bash #定义变量赋值时等号两边不能有空格,否则会报命令不存在 # 运行shell脚本两种方式 # 1.作为解释参数 /bin/sh test.sh ;  2.作为可执行文件 chmo ...

  2. linux bash 字符串 连接,Linux Bash 中字符串操作

    Linux Bash 中字符串操作 所谓 "子字符串" 就是出现在其它字符串内的字符串. 比如 "3382" 就是 "this is a 3382 t ...

  3. linux bash shell之declare

    linux bash shell之declare declare或typeset内建命令(它们是完全相同的)可以用来限定变量的属性.这是在某些编程语言中使用的定义类型不严格的方式.命令declare是 ...

  4. linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法

    linux bash shell之变量替换::=句法.=句法.:-句法.-句法.=?句法.?句法.:+句法.+句法 变量替换和变量默认值设置是紧密相关的,至少从概念出发是如此. 参数扩张是将类似于变量 ...

  5. linux bash and,linux bash shell中for的用法and示例

    关于linux bash shell中的for语句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用 ...

  6. linux bash shell wget 下载google drive(谷歌云端硬盘)中大文件

    linux bash shell wget 下载google drive(谷歌云端硬盘)中大文件 wget --load-cookies /tmp/cookies.txt "https:// ...

  7. Linux Bash Shell j简单入门

    BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  8. Linux Bash Shell编程快速入门

    BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  9. linux 终端 画圆,Linux Bash Shell快速入门

    BASH的基本语法 ·最简单的例子-- Hello World! ·关于输入.输出和错误输出 ·BASH中对变量的规定(与C语言的异同) ·BASH中的基本流程控制语法 ·函数的使用 2.1最简单的例 ...

最新文章

  1. 转:Silverlight样式写法
  2. 贝叶斯学习及共轭先验
  3. jQuery / zepto ajax 全局默认设置
  4. JavaWeb从开发环境搭建,到第一个servlet程序(图文)
  5. 关于JavaScript中this的指向,你知晓几分?请速来围观!
  6. 基于51单片机的指纹考勤系统
  7. 阿里云php探针,X 探针(刘海探针)开源 PHP 探针介绍
  8. Accessibility辅助功能的使用
  9. Linux工作目录切换命令
  10. 【计算广告】边际成本的妙用
  11. [机器学习导论]——第三课——神经网络Ⅱ
  12. 借鉴美团文章实现的动态线程池,已开源
  13. Lua 随机生成字符串
  14. TDS210示波器的应用
  15. 【图像】搜索相同,或者相似照片
  16. .Net自动生成BH
  17. 被AI潮抛弃的企业?对话微软CTO韦青,如何应对“变革”焦虑
  18. 微软人工智能-数据分析平台.md
  19. 使用 ESP32 + HaaS Python 打造智能温湿度UI面板
  20. 如何删除回收站右键的找回清空的文件选项

热门文章

  1. tek示波器软件_给示波器以云空间,泰克发布突破性的数据协同软件TekDrive
  2. 多级队列调度算法可视化界面_多级反馈队列调度算法
  3. python文件都是脚本吗_脚本语言系列之Python | Python文件IO
  4. html5模板区别,网页设计和平面设计理念的六大区别
  5. mysql 城市二级联动_MYSQL二级联动
  6. c语言 int a 5,在C语言中,有如下的写法:int a = 5; int *pa; pa = (a + 1);
  7. 在cad如果用计算机,CAD如何使用快速计算器为中的变量区域功能
  8. es文件浏览器怎么用_ES文件浏览器VIP直装版
  9. 利用Python进行数据分析--绘图和可视化
  10. power bi 雷达图_【自助式数据分析平台——WonderBI(豌豆BI)】免费在线试用_软件库...