首页 > 解决方案 > 查找单词中的第一个元音 - bash

问题描述

我使用常规编程语言找到了这个问题的其他几个答案,但没有找到 bash 的答案。我正在尝试编写一个 bash 脚本,但遇到了能够在给定字符串中找到第一个元音的问题。我的目标是查看一个单词是否以一个或多个辅音开头,然后将这些辅音移动到单词的末尾并添加“ay”,然后打印出该单词。任何帮助表示赞赏。

标签: bashshell

解决方案


sed使用和正则表达式/捕获组的一个想法:

$ sed -E 's/(^[^aeiouAEIOU]*)(.*)/\2\1ay/g' <<< 'nix'
ixnay
$ sed -E 's/(^[^aeiouAEIOU]*)(.*)/\2\1ay/g' <<< 'NIX'
IXNay
$ sed -E 's/(^[^aeiouAEIOU]*)(.*)/\2\1ay/g' <<< 'potato'
otatopay
$ sed -E 's/(^[^aeiouAEIOU]*)(.*)/\2\1ay/g' <<< 'school'
oolschay

在哪里:

  • sed -E- 在扩展正则表达式模式下运行
  • (^[^aeiouAEIOU]*)- 第一个捕获组从输入的开头(第一个^)开始,包括直到第一个元音的所有内容(即,不在 中的所有内容aeiouAEIOU
  • (.*)- 第二个捕获组抓取输入的其余部分(即,从第一个元音到输入的末尾)
  • \2\1ay- 输出第 2 个捕获组 ( \2),然后输出第 1 个捕获组 ( \1),然后'ay'
  • <<< 'nix'- 一个“这里的字符串”,它允许我们将一个字符串作为标准输入提供给sed命令

推荐阅读