使用sed得到第一个单词

时间:2011-10-22 12:27:04

标签: linux bash scripting sed command

我需要一个打印名字第一个字母的bash脚本。例如:Ruben Van Den Bosshe成为RVDB或Ken Van de Wilde成为KVdW

我想使用sed命令。

4 个答案:

答案 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'

如果有人知道如何提取单个字母单词的特殊情况并将其合并到上面的正则表达式中,我会感兴趣。