我的输出如下所示:
/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
打印图案空间。