【问题标题】:Replace all spaces with "-"用“-”替换所有空格
【发布时间】:2018-04-15 16:08:21
【问题描述】:

我想用- 替换所有空格,如果行包含-,则在bash 中使用sed 删除空格,例如

asd asd -> asd-asd
asd - asd -> asd-asd

【问题讨论】:

    标签: regex linux bash shell sed


    【解决方案1】:

    您可以将tr-s 选项(“挤压”)一起使用:

    $ tr -s ' ' - <<< 'asd asd'
    asd-asd
    $ tr -s ' ' - <<< 'asd - asd'
    asd-asd
    

    【讨论】:

      【解决方案2】:

      您可以匹配空格和破折号并替换为单个破折号:

      s/[ -]\+/-/g
      

      【讨论】:

        【解决方案3】:

        我可能会使用两条 sed 行:

        $ sed '{
          s/ *- */-/g;
          s/ \+/-/g;
         }' input_file_name > output_file_name
        

        第一行将由空格包围的所有破折号转换为仅破折号。第二行现在将任何空格字符串替换为单个破折号。

        就地修改,使用-i:

        $ sed -i '{
          s/ *- */-/g;
          s/ \+/-/g;
         }' input_file_name
        

        如果格式有问题,这可以减少到一行:

        $ sed -i '{ s/ *- */-/g; s/ \+/-/g; }' input_file_name
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多