打印一行中每个单词的首字母

swa*_*wam 4 bash awk sed

我搜索了其他帖子,但没有找到适合我需求的答案。我有一个以空格分隔的文件。我想打印给定行中每个单词的第一个字母。例如:

cat test.txt
This is a test sentence.
Run Code Online (Sandbox Code Playgroud)

使用 sed、awk 或组合,我希望输出为“Tiats”。关于为我指明正确方向的任何建议?

pax*_*blo 5

一种可能:

pax> echo 'This is a test sentence.
  This is another.' | sed -e 's/$/ /' -e 's/\([^ ]\)[^ ]* /\1/g' -e 's/^ *//'
Tiats
Tia
Run Code Online (Sandbox Code Playgroud)

第一个sed命令只是确保每行末尾有一个空格以简化第二个命令。

第二个命令将从每个单词中去除所有后续字母和尾随空格。这种意义上的单词被定义为任何一组非空格字符。

第三个是添加的内容,以确保删除每行上的前导空格。


Arj*_*Dan 5

sed 的另一个解决方案:

sed 's/\(.\)[^ ]* */\1/g' File
Run Code Online (Sandbox Code Playgroud)

在这里,我们寻找any character( .) 然后是sequence of non-space characters( [^ ]*) 和optional space( *)。用first字符(匹配的字符.)替换此模式。

样本:

$ cat File
This is a test sentence.
Ahggsh Mathsh Dansdjksj
$ sed 's/\(.\)[^ ]* */\1/g' File
Tiats
AMD
Run Code Online (Sandbox Code Playgroud)