Perl用数组

时间:2018-01-25 11:05:07

标签: regex perl sed

我有一个在运行命令行后返回的数组,由4个项组成。例如:

ProjectA: i love perl c_iloveperl License: ab123
ProjectB: i_love_perl c_iloveperl License: ab123

Item1 = ProjectA:
Item2 = i love perl  /  i_love_perl
Item3 = c_iloveperl  
Item4 = License: ab123

问题: 如何使用Perl / Sed仅使用下划线替换Item2的特定空白区域? 最后,我只需要让Item2和Item3没有空格。

i_love_perl c_iloveperl

有什么想法/建议吗? 提前致谢

2 个答案:

答案 0 :(得分:1)

还不完全确定,请你试试,如果这对你有所帮助,请告诉我。

awk '/^Project/{sub(/[^ ]* /,"");sub(/ License.*/,"");print}'  Input_file

输出如下。

i love perl c_iloveperl
i_love_perl c_iloveperl

代码将查找从字符串Project开始的行,然后将在第一个空格和字符串License之间打印内容。让我们知道它是如何进行的。

编辑: 由于OP需要在输出中包含字符串Project,因此以下内容可能有所帮助。

awk '/^Project/{sub(/[^ ]* /,"");sub(/ License.*/,"");if(NF>2){sub(/ /,"_")};if(NF>2){sub(/ /,"_")};print}'  Input_file

输出如下:

i_love_perl c_iloveperl
i_love_perl c_iloveperl

答案 1 :(得分:0)

sed以下也可能有所帮助。但是,正如我在this评论中提到的那样,你的问题有点简洁,因为很难弄清楚实际要求。

echo "Item1 = ProjectA:
Item2 = i love perl
Item3 = c_iloveperl
Item4 = License: ab123" | sed -nE '/Item2/{N;s/Item[23] *= *//g;s/ /_/g;s/\n/ /;s/_*$//p}'

<强>输出

i_love_perl c_iloveperl