一眨眼又几天没更新,中午在Q群里聊到一个单行命令,随手记录下。
A需求:某文件如下
aaa
bbb
aaa
aaa
ccc
aaa
ddd
……
通过命令改成如下格式:
1
bbb
3
5
ccc
7
ddd
……
方法如下:
bash
echo -en 'aaa\nbbb\naaa\naaa\ndddd'|awk 'BEGIN{tag=1}{if(/aaa/){print tag;tag+=2}else{print}}'
或者更短一点:
bash
echo -en 'aaa\nbbb\naaa\naaa\ndddd'|awk 'BEGIN{tag=1}{if(/aaa/){$0=tag;tag+=2};print}'
B需求:
aaa不是文件一行的全部内容,而只是一部分。
方法如下:
bash
echo -en 'aaa\nbbb\naaa\nfdaaafdaaa\ndddd'|awk 'BEGIN{tag=1}{gsub(/aaa/,tag) && tag+=2;print}'
以上三种,凯的perl版本分别如下:
perl
perl -nale 'BEGIN{$tag = 1}if(/aaa/){print $tag;$tag+=2}else{print}'
perl -nalpe 'BEGIN{$tag = 1};$_=$tag and $tag+=2 if /aaa/'
perl -nalpe 'BEGIN{$tag = 1};$tag+=2 if s/aaa/$tag/'