Sed - Как поставить скобки вокруг второго слова - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть следующая команда sed, которая ставит скобки вокруг первого слова - (привет) - я подумал, что если я захочу изменить это, чтобы поставить скобки вокруг второго слова, все, что мне нужно было сделать, это изменить (\ 1) на ( \ 2) как я думал, это поднимет второе слово, но оно не работает - каков тогда правильный способ ссылки на второе слово?

 echo "hello world" | sed -re 's/(^\w*)/(\1)/'

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Вы ищете это:

echo "hello world" | sed 's/\(.*\) \(.*\)/\2/'

мир

echo "hello world" | sed 's/\(.*\) \(.*\)/\1/'

привет

Поменяйте местами слова:

echo "hello world" | sed 's/\(.*\) \(.*\)/\2 \1/'

world hello

... и вставить скобки:

echo "hello world" | sed 's/\(.*\) \(.*\)/\1 [\2]/'

привет [мир]

Как это работает: . *. * соответствует двум словам "привет мир"

Далее укажите области интереса, окружив их скобками с обратной косой чертой.

Хороший учебник здесь: http://www.ibm.com/developerworks/linux/library/l-sed2/index.html

1 голос
/ 07 декабря 2011

\ 2 относится не ко второму слову, а ко второму выражению в скобках.Поэтому оба слова в скобках должны работать:

echo hello world | sed -r 's/(\w+) (\w+)/\1 (\2)/'
1 голос
/ 07 декабря 2011

Это может работать для вас:

echo "hello world" | sed -re 's/\w+/(&)/g'

или

echo "hello world" | sed -re 's/(^\w*)(\s*)(\w*)/(\1)\2(\3)/'

Чтобы заключить в скобки только второе слово:

echo "hello world" | sed -re 's/\w*/(&)/2'

Чтобы заключить в скобки второе слово и далее:

echo "hello brave new world" | sed -re 's/\w*/(&)/2g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...