我有一个在运行命令行后返回的数组,由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
有什么想法/建议吗? 提前致谢
答案 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