リンクに何かを挿入することで、ターミナルからグーグルで検索するコードを作成しようとしています。元の検索語の代わりにリンクにスペースを挿入できるように、スペースをプラスに置き換える方法を誰もが知っていますか?私はsedのようなコマンドの使用を考えていますが、sedのフォーマットは理解していません。
私は現在以下を使用しています:
search() {
read F1
a=$F1
b=https://www.google.com/#q=
c=$b$a
echo OPENING:
echo $c
open $c
}
問題は、スペースの代わりにプラスが必要なことです。変数のスペースをスペースに置き換える方法が必要です。
私はこれを行う方法を考え出しました、そしてそれは私のコンピューターで動作します。このコードを.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"
}
変数bashシェル内の文字を置き換えるには、 パラメーター展開 を使用できます。
例各スペースをプラス文字に置き換える
$ var='some string with spaces'
$ echo "${var// /+}"
some+string++++with+spaces
または、スペースのシーケンスを単一のプラス記号で置き換えます(シェルで拡張グロビングを有効にしている場合)
$ 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"
}
次に、新しいログインシェルを起動してテストします
$ bash -l
$ search
Please enter a search term: ask ubuntu
OPENING: https://www.google.com/#q=ask+ubuntu
$
次のコマンドを使用できます。
sed -i 's/ /+/g' filename