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回)。