用其他字符替换字符

用其他字符替换字符

我正在尝试编写一个代码,通过在链接中插入内容来从终端搜索 Google。有人知道如何用加号替换空格,以便我可以将其插入链接而不是原始搜索词吗?我正在考虑使用像 sed 这样的命令,尽管我不了解 sed 的格式。

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

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

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

答案1

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

例如用加号替换每个空格

$ var='some string    with spaces'
$ echo "${var// /+}"
some+string++++with+spaces

或者用单个加号替换空格序列(前提是你已经启用了 shell 中的扩展通配符)

$ echo "${var//+( )/+}"
some+string+with+spaces

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

$ var='some string    with spaces'
$ echo "$var"
some string    with spaces
$ 
$ var="${var//+( )/+}"
$ echo "$var"
some+string+with+spaces

以下是您更新的问题中描述的上下文中其用法的说明:

构建一个最小~/.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"
}

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

$ bash -l
$ search
Please enter a search term: ask   ubuntu
OPENING: https://www.google.com/#q=ask+ubuntu
$ 

答案2

你可以使用这个命令:

sed -i 's/ /+/g' filename

答案3

我找到了如何做到这一点的方法,它在我的电脑上有效。只需在您的 .bash_profile 中使用此代码即可。

search() {
clear
echo Type in your search term:
read F1
F=`echo "$F1" | sed "s/ /+/g"`
echo Opening: https://www.google.com/#q="$F"
open https://www.google.com/#q="$F"
}

相关内容