ゼロから複数の先頭と末尾のスペースを持つことができる文字列を取得します。
私は多くのハッカーなしでそれらを取り除こうとしていますが、私のコードは巨大に見えます。
クリーンな方法でこれを行う方法は?
ゼロから複数の先頭と末尾のスペースを持つことができる文字列を取得します。
私は多くのハッカーなしでそれらを取り除こうとしていますが、私のコードは巨大に見えます。
クリーンな方法でこれを行う方法は?
次のように簡単:
$ src=" some text "
$ dst=" $(echo $src)"
$ echo ":$dst:"
: some text:
$(echo $src)
周囲のスペースをすべて取り除きます。その前に必要なスペースを追加するだけではありません。
最も簡単なのは、おそらく外部プロセスを使用することです。
value=$(echo "$value" | sed 's/^ *\(.*[^ ]\) *$/ \1/')
空の文字列を 2 つのスペースに変換する必要がある場合は、正規表現を変更する必要があります。Linux を使用していない場合は、sed
方言が若干異なる場合があります。awk
移植性を最大限に高めるには、または Perlに切り替えるか、すべて Bash で行います。それはもう少し複雑になりますが、最初trailing=${value##*[! ]}
は、末尾のスペースが含まれており、 でそれらをトリミングでき${value%$trailing}
ます。先頭のスペースについても同様です。詳細については、Bash マニュアルの変数置換に関するセクションを参照してください。
どのように文字列を呼び出していますか? それがエコーなら、あなたはただ置くことができます
Echo "<2 spaces>". "string";
通常の文字列の場合は、最初の qoute と文字列の間に 2 つのスペースを入れるだけです。
"<2spaces> string here"
を使用した片道GNU sed
:
sed 's/^[ \t]*/ /; s/[ \t]*$//' file.txt
これを次のように bash 変数に適用できます。
echo "$string" | sed 's/^[ \t]*/ /; s/[ \t]*$//'
そして、次のように保存します。
variable=$(echo "$string" | sed 's/^[ \t]*/ /; s/[ \t]*$//')
説明:
最初の置換では、先頭の空白がすべて削除され、2 つのスペースに置き換えられます。2 番目の置換は、単純にすべての遅れている空白を行から削除します。
正規表現を使用して、先頭と末尾のスペースの間のすべてを一致させることができます。一致したテキストはBASH_REMATCH
配列内にあります (最初の括弧グループに一致するテキストは要素 1 にあります)。
spcs='\ *'
text='.*[^ ]'
[[ $src =~ ^$spcs($text)$spcs$ ]]
dst=" ${BASH_REMATCH[1]}"