web-dev-qa-db-ja.com

キャラクターを他のキャラクターに置き換える

リンクに何かを挿入することで、ターミナルからグーグルで検索するコードを作成しようとしています。元の検索語の代わりにリンクにスペースを挿入できるように、スペースをプラスに置き換える方法を誰もが知っていますか?私はsedのようなコマンドの使用を考えていますが、sedのフォーマットは理解していません。

私は現在以下を使用しています:

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

問題は、スペースの代わりにプラスが必要なことです。変数のスペースをスペースに置き換える方法が必要です。

2
The Bean

私はこれを行う方法を考え出しました、そしてそれは私のコンピューターで動作します。このコードを.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"
}
0
The Bean

変数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
$ 
6
steeldriver

次のコマンドを使用できます。

sed -i 's/ /+/g' filename
2
Yash Khosla