所以我正在 bash 中编写一个涉及 madlibs 的程序,并且我必须创建一个函数来替换例如单词的第一次出现。如果输入的第一个单词是 apple,我可以使用此函数将其替换为 pear。我将如何在 bash 中解决这个问题? (对于 bash 来说非常新)
function replaceFirst(){
#Code to go here
}
我看到了一些关于“sed”的东西,但正如我所说,我是新来的,所以任何帮助都会很棒!
答案1
要将一个单词替换为另一个单词,无需使用诸如 之类的外部命令sed
。 Bash 本身就可以完成这项工作。
function replace_first {
local user_input="$1"
local replace_with="$2"
set -f -- $1
local first_word="$1"
echo "${user_input/#$first_word/$replace_with}"
}
# read user input
read -rp 'Enter some text: '
# sample usage
replace_first "$REPLY" Hello
set
重新设置位置参数,以便您可以轻松访问用户输入的第一个单词。该-f
选项可防止文件名扩展。另请注意,$1
未引用。一般来说,您应该始终引用变量,但在这种情况下需要分词。
${parameter/#pattern/string}
仅替换字符串的第一个单词。这是为了防止相同的单词出现在字符串中的其他位置。
Bash 提供了有关的详细信息外壳参数扩展。
假设输入文本是Hi there
。输出如下所示:
$ Enter some text: Hi there
Hello there