逆参照でsedを使用する

逆参照でsedを使用する

2つの文字列の間のスペースを削除しようとしていますが、

312.2 MB
123.34 KB
487.1 GB

私はそれらを次のように変更したいと思います:

312.2MB
123.34KB
487.1GB

頑張ってきて、次のことができます。

echo "312.2 MB" | sed s/[0-9][[:space:]][GMK]//g
312.B

しかし、次のように逆参照を作成しようとするとsed

echo "312.2 MB" | sed s/\([0-9]\)[[:space:]]\([GMK]\)/\1/g
312.2 MB

私の考えでは、一致が1つだけあり、逆参照が完全な一致であるようです。しかし、次のようになります。

echo "312.2 MB" | sed s/\([0-9]\)[[:space:]]\([GMK]\)/TRY/g
312.2 MB

()だから私が次を使ってキャラクターをキャプチャするとき

正規表現は完全に正確ではないかもしれませんが、その理由はわかりません。

ベストアンサー1

問題は参照にあります。

コマンドを引用しなかったため、sed角かっこは\(...\)に渡される前にシェルによって解釈されますsed

したがって、sedエスケープされた角かっこではなくリテラル角括弧として扱われ、逆参照には影響しません。

以下を行う必要があります。

echo "312.2 MB" | sed 's/\([0-9]\)[[:space:]]\([GMK]\)/\1\2/g'

逆参照に影響を与え、必要なものを入手してください。

またはより簡単に:

echo "312.2 MB" | sed 's/ //'

おすすめ記事