【发布时间】:2018-04-15 16:08:21
【问题描述】:
我想用- 替换所有空格,如果行包含-,则在bash 中使用sed 删除空格,例如
asd asd -> asd-asdasd - asd -> asd-asd
【问题讨论】:
标签: regex linux bash shell sed
我想用- 替换所有空格,如果行包含-,则在bash 中使用sed 删除空格,例如
asd asd -> asd-asdasd - asd -> asd-asd
【问题讨论】:
标签: regex linux bash shell sed
您可以将tr 与-s 选项(“挤压”)一起使用:
$ tr -s ' ' - <<< 'asd asd'
asd-asd
$ tr -s ' ' - <<< 'asd - asd'
asd-asd
【讨论】:
您可以匹配空格和破折号并替换为单个破折号:
s/[ -]\+/-/g
【讨论】:
我可能会使用两条 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
【讨论】: