代码之家  ›  专栏  ›  技术社区  ›  Himanshu Pant

在Unix中,将最后9个delimeters“”替换为“|”

  •  0
  • Himanshu Pant  · 技术社区  · 7 年前

    我想将文件中的最后9个“,”delimeters替换为“|”。

    例如,发件人:

    abcd,3,5,5,7,7,1,2,3,4
    "ashu,pant,something",3,5,5,7,7,8,7,8,8,8
    

    收件人:

    abcd|3|5|5|7|7|1|2|3|4
    "ashu,pant,something"|3|5|5|7|7|8|7|8|8|8
    

    非常感谢您的帮助。

    2 回复  |  直到 7 年前
        1
  •  0
  •   James Brown    7 年前

    不完全相同,但在第二次出现后全部替换为GNU sed:

    $ echo \"ashu,pant\",3,5,5,7,7,87,8,8,8 |
      sed 's/,/|/2g'
    "ashu,pant"|3|5|5|7|7|87|8|8|8
    

    编辑以匹配更改的需求:

    粗俗,但首先要颠倒行,用管道替换所有逗号,然后从第10次出现开始用逗号替换管道:

    $ echo -e \"ashu,pant\",3,5,5,7,7,87,8,8,8\\nabcd,3,5,5,7,7,1,2,3,4 |
      rev |
      sed 's/,/|/g; s/|/,/10g' |
      rev
    "ashu,pant"|3|5|5|7|7|87|8|8|8
    abcd|3|5|5|7|7|1|2|3|4
    

    您还可以使用GNU awk和 FPAT 要替换引号外的所有逗号,请执行以下操作:

    $ echo -e \"ashu,pant\",3,5,5,7,7,87,8,8,8\\nabcd,3,5,5,7,7,1,2,3,4 | 
      awk 'BEGIN{FPAT="([^,]+)|(\"[^\"]+\")";OFS="|"}{$1=$1}1'
    "ashu,pant"|3|5|5|7|7|87|8|8|8
    abcd|3|5|5|7|7|1|2|3|4
    
        2
  •  0
  •   Claes Wikner    7 年前
    awk '{gsub(/[[:digit:]]/," |&")gsub(/, /,"")}1' file
    
    output
    abcd|3|5|5|7|7|1|2|3|4
    "ashu,pant,something"|3|5|5|7|7|8|7|8|8|8