Заключите в скобки первый символ каждого слова - PullRequest
0 голосов
/ 20 июня 2019

я хочу заключить в скобки первый символ каждого слова

$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'

кто-нибудь может объяснить?я не понимаю, как это работает?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Мне нужно использовать sed -E, чтобы заставить это работать.

$ echo "Welcome To The Geek Stuff" | sed 's/(\b[A-Z])/(\1)/g'
sed: -e expression #1, char 18: invalid reference \1 on `s' command's RHS
$ echo "Welcome To The Geek Stuff" | sed -E 's/(\<.)/(\1)/g'
(W)elcome (T)o (T)he (G)eek (S)tuff

Вы также можете использовать якорь \<, который является «началом слова», где \b является «границей слова».Использование маркера начала слова позволяет упростить регулярное выражение для соответствия любому символу слова:

$ echo "Welcome To The Geek Stuff 123" | sed -E 's/\<./(&)/g'
(W)elcome (T)o (T)he (G)eek (S)tuff (1)23
1 голос
/ 20 июня 2019
sed 's/pattern1/pattern2'  --- Does "replace first occurrence of pattern1 with pattern2"

sed 's/pattern1/pattern2/g' --- Does "A (g)lobal replacement => replace all the occurrence of pattern1 with pattern2 "

sed 's/\b(pattern1)/pattern2/g'  --- Does  " A word by word search"

sed 's/\b([A-Z])/pattern2/g'  --- Does " Matches a single uppercase letter"
sed 's/\b([A-Z])/(\1)/g'     --- Does " sed 's/\b([A-Z])/([A-Z])/g' "
                                \1 is a back reference. [Refer][https://www.gnu.org/software/sed/manual/html_node/Back_002dreferences-and-Subexpressions.html]

Короче говоря, он выполняет глобальную замену (заменяет все вхождения) любой заглавной буквы на (заглавная буква), выполняя поиск по слову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...