получить первую букву слов, используя Sed - PullRequest
2 голосов
/ 22 октября 2011

Мне нужен скрипт bash, который печатает первую букву имени. Пример: Рубен Ван Ден Босше становится RVDB или Кен Ван де Уайлд становится KVdW

Я хочу использовать команду sed.

Ответы [ 4 ]

7 голосов
/ 22 октября 2011
$ echo 'Ken Van de Wilde' | sed 's/\B\w*//g;s/\s//g'
KVdW
4 голосов
/ 22 октября 2011

Возможно, есть более аккуратный способ сделать это, но, похоже, работает следующее:

$ echo 'Ken Van de Wilde' | sed 's/\(\w\)\w*\( \|$\)/\1/g'
KVdW
$ echo 'Ruben Van Den Bosshe' | sed 's/\(\w\)\w*\( \|$\)/\1/g'
RVDB

Чтобы немного разбить это регулярное выражение, оно по очереди соответствует следующему:

  • Буква слова, захваченная в первой группе: \(\w\)
  • Ноль или более букв слов: \w*
  • И, наконец, пробел или конецстрока: \( \|$\)

Эта последовательность заменяется тем, что было захвачено в первой группе: \1

3 голосов
/ 22 октября 2011

Это должно быть совместимо со всеми реализациями sed в POSIX:

echo "Someone Is Watching" | sed 's/\([^[:space:]]\)[^[:space:]]*[[:space:]]*/\1/g'
SIW
0 голосов
/ 23 октября 2011

Ответ Кева может быть немного улучшен:

echo 'K Van de Wilde' | sed 's/\B.//g;s/\s//g'

или даже сокращен, если все слова состоят из двух или более символов:

echo 'Ken Van de Wilde' | sed 's/\B.\s*//g'

Если кто-нибудь знает, как извлечь специальный случайиз одного буквенного слова и включения его в приведенное выше регулярное выражение, мне было бы интересно.

...