【问题标题】:Replacing first occurence in every line替换每行中的第一个出现
【发布时间】:2013-12-22 17:00:52
【问题描述】:

假设我有一个格式如下的文档:

word1 word2 word3
word4 word5 word6
word7 word8

如何使用sed 将第一次出现的空格替换为逗号后跟空格,以便文档看起来像:

word1, word2 word3
word4, word5 word6
word7, word8

谢谢!

【问题讨论】:

    标签: shell scripting sed


    【解决方案1】:

    简单:

    sed -i 's/ /, /' your_file
    

    这会查找第一次出现的空格,用逗号和空格替换它,然后移动到下一行。

    【讨论】:

      【解决方案2】:
      echo word1 word2 word3|sed -r 's/(\s)/,\1/'
      

      输出:

      word1, word2 word3
      

      【讨论】:

      • 只有空格的行怎么样
      • 如果你有这样的行,把/^\s+$/!放在上面。
      【解决方案3】:

      怎么样:

      sed -e 's/\s\+/, /'
      

      输出:

      word1, word2 word3
      word4, word5 word6
      word7, word8
      

      【讨论】:

      • 这会将一个或多个空格替换为一个,后跟一个空格。
      【解决方案4】:

      使用awk

      awk '{sub(/ /,", ")}1' file
      word1, word2 word3
      word4, word5 word6
      word7, word8
      

      【讨论】:

      • 这应该是公认的答案。它不依赖于正则表达式但有效!
      【解决方案5】:
      sed 's/\([^[:blank:]]\{1,\}\)/\1,/' YourFile
      

      在“非空格”的第一个块之后添加,,因此行的开头可以以空格开头,它仍然有效,如果行没有工作但只有空格(在这种情况下没有,

      【讨论】:

        【解决方案6】:

        echo FRIEND TOO MUCH |sed 's/ /, /'

        朋友,太多了

        【讨论】:

          猜你喜欢
          • 2015-08-07
          • 2021-11-12
          • 2020-06-08
          • 2012-04-25
          • 1970-01-01
          • 2018-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多