2011-12-07 3 views
0

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

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

ответ

1

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

echo hello world | sed -r 's/(\w+) (\w+)/\1 (\2)/' 
1

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

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

или

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

К кронштейну только 2-ое слово:

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

к кронштейну 2-ое слово вперед:

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

Вы ищете это:

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

мир

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

привет

Своп слова:

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

мир привет

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

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

привет [мир]

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

..

Затем укажите интересующие области, окружая их скользящими скобками.

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

Смежные вопросы