1

ゼロから複数の先頭と末尾のスペースを持つことができる文字列を取得します。

私は多くのハッカーなしでそれらを取り除こうとしていますが、私のコードは巨大に見えます。

クリーンな方法でこれを行う方法は?

4

5 に答える 5

5

次のように簡単:

$ src="      some text          "

$ dst="  $(echo $src)" 

$ echo ":$dst:"
:  some text:

$(echo $src)周囲のスペースをすべて取り除きます。その前に必要なスペースを追加するだけではありません。

于 2012-10-13T12:40:56.653 に答える
1

最も簡単なのは、おそらく外部プロセスを使用することです。

value=$(echo "$value" | sed 's/^ *\(.*[^ ]\) *$/  \1/')

空の文字列を 2 つのスペースに変換する必要がある場合は、正規表現を変更する必要があります。Linux を使用していない場合は、sed方言が若干異なる場合があります。awk移植性を最大限に高めるには、または Perlに切り替えるか、すべて Bash で行います。それはもう少し複雑になりますが、最初trailing=${value##*[! ]}は、末尾のスペースが含まれており、 でそれらをトリミングでき${value%$trailing}ます。先頭のスペースについても同様です。詳細については、Bash マニュアルの変数置換に関するセクションを参照してください。

于 2012-10-13T12:46:14.043 に答える
1

どのように文字列を呼び出していますか? それがエコーなら、あなたはただ置くことができます

Echo "<2 spaces>". "string";

通常の文字列の場合は、最初の qoute と文字列の間に 2 つのスペースを入れるだけです。

"<2spaces> string here"
于 2012-10-13T12:38:47.570 に答える
1

を使用した片道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 番目の置換は、単純にすべての遅れている空白を行から削除します。

于 2012-10-13T12:39:55.480 に答える
0

正規表現を使用して、先頭と末尾のスペースの間のすべてを一致させることができます。一致したテキストはBASH_REMATCH配列内にあります (最初の括弧グループに一致するテキストは要素 1 にあります)。

spcs='\ *'
text='.*[^ ]'
[[ $src =~ ^$spcs($text)$spcs$ ]]
dst="  ${BASH_REMATCH[1]}"
于 2012-10-13T13:43:25.813 に答える