将所有空格替换为" - "

时间:2017-11-03 01:27:21

标签: regex linux bash shell sed

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

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

您可以匹配空格和短划线,并用一个短划线替换:

s/[ -]\+/-/g

答案 2 :(得分:0)

我可能会使用两条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