我需要一个打印名字第一个字母的bash脚本。例如:Ruben Van Den Bosshe成为RVDB或Ken Van de Wilde成为KVdW
我想使用sed命令。
答案 0 :(得分:7)
$ echo 'Ken Van de Wilde' | sed 's/\B\w*//g;s/\s//g'
KVdW
答案 1 :(得分:4)
这可能是一种更简洁的方法,但以下似乎有效:
$ 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
答案 2 :(得分:3)
这应该与sed的所有POSIX实现兼容:
echo "Someone Is Watching" | sed 's/\([^[:space:]]\)[^[:space:]]*[[:space:]]*/\1/g'
SIW
答案 3 :(得分:0)
Kev的答案可以略微改善:
echo 'K Van de Wilde' | sed 's/\B.//g;s/\s//g'
如果所有单词都是两个或更多字符,则甚至缩短:
echo 'Ken Van de Wilde' | sed 's/\B.\s*//g'
如果有人知道如何提取单个字母单词的特殊情况并将其合并到上面的正则表达式中,我会感兴趣。