1

Я хочу добавить "/" перед каждым числом, используя sed:

    echo 1 2 3 4 5 6 7  | sed 's/[ ^]*/&\//g'

    /1 /2 /3 /4 /5 /6 /7/

Когда я использую этот синтаксис, почему я получаю "/" после 7? Как я могу исправить мой синтаксис sed , чтобы получить это:

    /1 /2 /3 /4 /5 /6 /7

2 ответа2

2

чтобы исправить это: добавьте косую черту перед началом числа (я использую : для разделения шаблона и замены вместо / , нет необходимости экранировать косую черту)

 % echo 1 2 3 4 5 6 7 | sed 's:\([1-9]\+\):/\1:g'

проблема вашей команды в том, что вы используете * , чтобы соответствовать либо space или Carret ^ и не только один из них, но любое их число, включая 0., который также соответствует концу строки (после 7) (и, к счастью, для вас также в начале).

чтобы заставить это работать с любым словом (иначе непространственным), используйте это:

 % echo ha hu 1 2 ho | sed 's:[^ ]\+:/&:g'
2

Попробуйте это:

echo '1 2 3 4 5 6 7' | sed 's|\w\+|/&|g'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .