sub除了第一个匹配的模式

时间:2017-11-23 06:38:55

标签: awk sed grep

我知道如何击败awk,gred,sed但不知道除了第一场比赛之外如何击球。我在doc中搜索但无法找到正确的命令来执行此操作。 我有一个这样的简单文件:

tongtha AL_Vcs abcdef
tongtha AL_Vcs abcdef
tongtha AL_Vcs abcdef

tuanngu AL_Ptime HEO
tuanngu AL_Ptime HEO

vuau AL_Ptime E2x
vuau AL_verdi_b E2x
vuau AL_TShell EU2HL

这是我的愿望

tongtha AL_Vcs abcdef
        AL_Vcs abcdef
        AL_Vcs abcdef

tuanngu AL_Ptime HEO
        AL_Ptime HEO

vuau AL_Ptime E2x
     AL_verdi_b E2x
     AL_TShell EU2HL

如果我能以2美元的价格将其分成2美元,那就更好了:

tongtha AL_Vcs abcdef
               abcdef
               abcdef

tuanngu AL_Ptime HEO
                 HEO

vuau AL_Ptime E2x
     AL_verdi_b E2x
     AL_TShell EU2HL

1 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed -r ':a;N;/^(\S+\s+\S+\s+)(.*\n)\1/{:b;s//\1\n\2\1\n/;h;s/\n.*//;s/./ /g;H;g;s/\n(.*\n).*\n(.*)\n(.*)$/\1\3\2/;ba};/^(\S+\s+)(.*\n)\1/bb;$b;/\n\s*$/b;h;s/\n[^\n]*$//p;g;s/.*\n//;ba' file

sed脚本一次打印一组行。该脚本首先测试第一个和第二个字段是否重复,然后使用通用解决方案用空格替换这些字段。如果第一个测试失败,则脚本会尝试仅匹配第一个字段,如果成功则使用与上面相同的解决方案。