用其他字符替换字符

The*_*ean 3 bash sed

我试图通过将东西插入链接来制作一个从终端搜索谷歌的代码。有谁知道如何用加号替换空格,以便我可以将其插入链接而不是原始搜索词。我正在考虑使用诸如 sed 之类的命令,尽管我不了解 sed 的格式。

我目前正在使用以下内容:

search() {
read F1
a=$F1
b=https://www.google.com/#q=
c=$b$a
echo OPENING:
echo $c
open $c
}
Run Code Online (Sandbox Code Playgroud)

问题是这需要加号而不是空格。我需要一种方法来用 a 变量中的加号替换空格。

ste*_*ver 9

在 bash shell 中替换变量中的字符,可以使用参数扩展

前任。用加号替换每个空格

$ var='some string    with spaces'
$ echo "${var// /+}"
some+string++++with+spaces
Run Code Online (Sandbox Code Playgroud)

或者用一个加号替换空格序列(前提是您在 shell 中启用了扩展通配符)

$ echo "${var//+( )/+}"
some+string+with+spaces
Run Code Online (Sandbox Code Playgroud)

您可以分配给新变量newvar="${var//+( )/+}"或重新分配以直接更改变量的值,即

$ var='some string    with spaces'
$ echo "$var"
some string    with spaces
$ 
$ var="${var//+( )/+}"
$ echo "$var"
some+string+with+spaces
Run Code Online (Sandbox Code Playgroud)

以下是它在您更新的问题中描述的上下文中的使用说明:

构建一个最小 ~/.bash_profile

if [ -r $HOME/.profile ]; then
  . $HOME/.profile
fi

search() {
  read -p 'Please enter a search term: ' searchterm
  c="https://www.google.com/#q=${searchterm//+( )/+}"
  echo "OPENING: $c"
}
Run Code Online (Sandbox Code Playgroud)

然后启动一个新的登录shell并测试它

$ bash -l
$ search
Please enter a search term: ask   ubuntu
OPENING: https://www.google.com/#q=ask+ubuntu
$ 
Run Code Online (Sandbox Code Playgroud)