需求来源:默认的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. (5.1.5)引擎管理——多服务器管理之中央管理服务器(CMS)
  2. linux命令行引导iso,如何在Linux上使用命令行从可启动ISO创建可启动USB?
  3. 数据结构_树与二叉树(mindmap)+LeetCode_100.相同的树(C语言)
  4. Qt for Android调用原生接口打开相机拍照并存储照片
  5. conda install 换源_科学网—Anaconda 报错Multiple Errors Encountered和添加国内镜像以及换源和恢复默认源 - 张伟的博文...
  6. 数据:BTC全网算力为146.06 EH/s,新增地址数51.19万
  7. C# Web Service 不使用服务引用直接调用方法(转)
  8. 微信小程序云开发-时间存储、转换、比较
  9. python转换unicode_转-Python Unicode与中文处理
  10. 计算机人工智能识别系统应用领域,人工智能论文3000字以上
  11. 全国大学生“高教杯“成图大赛:关于蜗轮蜗杆快速建模研究(二)
  12. mbp touchbar设置_新款 MBP 配备 Touch Bar 如何关机?
  13. Bootstrap 4中使用BootstrapTable时需要导入popper.js
  14. 团队任务5:项目总结
  15. python安装/pycharm破解与安装
  16. 光猫、光纤收发器、路由器、交换机
  17. 华为初面 + 综合面试,附上面试题,share 给大家~
  18. sys 系统库 笔记(一)—— 简介与快速入门
  19. JQuery DataGrid 中文文档
  20. 全球与中国转底炉市场深度研究分析报告

热门文章

  1. java微信刷卡支付demo_微信刷卡支付例子
  2. 安装redis k8s_K8S 生态周报| Docker v19.03.6-rc2 发布
  3. java 代码段 执行超时 抛异常_Java 并发队列详解TransferQueue、BlockingQueue、BlockingDeque
  4. 区块链开发指南_区块链软件开发详解
  5. ribbon 配置 动态更新_SpringCloud实战三-Ribbon
  6. java中文件下载的思路(参考:孤傲苍狼)
  7. spark官方文档_Spark机器学习之Pipeline
  8. thrift java 对象_Apache Thrift,Java:对象数据类型
  9. win10无线投屏_Win10电脑屏幕分割成四分屏投屏测试
  10. osea/ introduction