一行打印多个搜索模式+文本操作

一行打印多个搜索模式+文本操作

我的输出如下所示:

 /map1/firmware1   Targets   Properties
     version=2.44
     date=Jul 19 2016
     name=iLO 4

我想要的输出是:

version=2.44 date=Jul_19_2016

为了将输出合并到一行中,我尝试使用xargs.但随后他只打印日期。

cat test | egrep '(version=|date=)' |xargs
 date=Jul 19 2016

答案1

OP的问题似乎是由于dos样式行结尾......

例子:

$ cat -e chk 
 /map1/firmware1   Targets   Properties^M$
     version=2.44^M$
     date=Jul 19 2016^M$
     name=iLO 4^M$

$ egrep '(version=|date=)' chk | xargs
 date=Jul 19 2016

转换为unix样式行尾后:

$ perl -i -pe 's|\r\n|\n|' chk 

$ cat -e chk 
 /map1/firmware1   Targets   Properties$
     version=2.44$
     date=Jul 19 2016$
     name=iLO 4$

$ egrep '(version=|date=)' chk | xargs
version=2.44 date=Jul 19 2016

答案2

使用sed单行

$ sed -n '/version/ {N; s/[\r\n]//g; p}' filename
     version=2.44     date=Jul 19 2016

解释

  • /version/匹配模式并执行大括号块{ }
  • N从输入文件中获取下一行并将其附加到模式空间。
  • s/[\r\n]//g从模式空间中删除所有换行符和回车符。
  • p打印图案空间。

相关内容