bashの文字列でスペース()をドット(.)に置き換えることができるようにする必要があります。
これはかなり単純だと思いますが、私は新しいので、この使用のために同様の例を変更する方法を理解できません。
bashの文字列でスペース()をドット(.)に置き換えることができるようにする必要があります。
これはかなり単純だと思いますが、私は新しいので、この使用のために同様の例を変更する方法を理解できません。
回答:
インラインシェル文字列置換を使用します。例:
foo=" "
# replace first blank only
bar=${foo/ /.}
# replace all blanks
bar=${foo// /.}
詳細については、http://tldp.org/LDP/abs/html/string-manipulation.htmlを参照してください。
trです!...使用可能なメモリとハードウェアリソースによっては...しかし、あなたの言う通りです!:実行する作業の種類によっては、専用ツールの方が効率的です。
$'\n'
次のtrようにを使用できます。
tr " " .
例:
# echo "hello world" | tr " " .
hello.world
からman tr:
説明
標準入力から文字を変換、圧縮、削除し、標準出力に書き込みます。
bashでは、文字列内で構文を使用してパターン置換を行うことができます${VARIABLE//PATTERN/REPLACEMENT}。ちょうど使用/していない//だけで最初の発生を交換します。パターンは、ファイルグロブのようなワイルドカードパターンです。
string='foo bar qux'
one="${string/ /.}" # sets one to 'foo.bar qux'
all="${string// /.}" # sets all to 'foo.bar.qux'
パラメータ置換を使用します。
string=${string// /.}
パスのためにこれを試してください:
echo \"hello world\"|sed 's/ /+/g'|sed 's/+/\/g'|sed 's/\"//g'
二重引用符で囲まれた文字列内のスペースを+歌に置き換え、次に+記号をバックスラッシュに置き換え、二重引用符を削除/置換します。
Cygwinのパスの1つにあるスペースを置き換えるためにこれを使用する必要がありました。
echo \"$(cygpath -u $JAVA_HOME)\"|sed 's/ /+/g'|sed 's/+/\\/g'|sed 's/\"//g'
sedます。引用は無関係です。
tr、長い文字列を好むかもしれません。私のシステムでtrは、複数の文字を含む文字列で始まるbashよりもパフォーマンスが優れています1000。bashの時間の複雑さは線形よりも悪いようです。小さなテスト:x="$(tr -dc 'a-z \n' </dev/urandom | head -c1M)"; time y="$(tr ' ' \\- <<< "$x")"; time z="${x// /-}"。1Mの文字列の長さで(= 2 ^ 20)trかかった0.04sとのbash 5.0.11がかかりました17s。2Mでtr取った0.07s(予想される)が、bashがかかった69s(2回文字列の長さのために長いとして4回)。