【发布时间】:2011-12-13 03:45:34
【问题描述】:
我需要一个 bash 脚本来打印名称的第一个字母。示例:Ruben Van Den Bosshe 成为 RVDB 或 Ken Van de Wilde 成为 KVdW
我想使用 sed 命令。
【问题讨论】:
标签: linux bash scripting sed command
我需要一个 bash 脚本来打印名称的第一个字母。示例:Ruben Van Den Bosshe 成为 RVDB 或 Ken Van de Wilde 成为 KVdW
我想使用 sed 命令。
【问题讨论】:
标签: linux bash scripting sed command
这可能有一种更简洁的方法,但以下方法似乎可行:
$ 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
【讨论】:
这应该在 sed 的所有 POSIX 实现中兼容:
echo "Someone Is Watching" | sed 's/\([^[:space:]]\)[^[:space:]]*[[:space:]]*/\1/g'
SIW
【讨论】:
$ echo 'Ken Van de Wilde' | sed 's/\B\w*//g;s/\s//g'
KVdW
【讨论】:
Kev 的回答可以稍微改进一下:
echo 'K Van de Wilde' | sed 's/\B.//g;s/\s//g'
如果所有单词都是两个或更多字符,甚至缩短为:
echo 'Ken Van de Wilde' | sed 's/\B.\s*//g'
如果有人知道如何提取单个字母单词的特殊情况并将其合并到上述正则表达式中,我会很感兴趣。
【讨论】: