bashで空白を(アンダースコア)_で置き換える最も簡単な方法[終了]


91

最近、XenServerでVMを解析する小さなスクリプトを作成する必要がありました。VMの名前はWindows XPやWindows Server 2008などでほとんどが空白であるので、それらの空白を削除してアンダースコア_に置き換える必要がありました。文字列操作に関しては、sedを使用してこれを行う簡単な解決策が見つかりました。

echo "This is just a test" | sed -e 's/ /_/g'

戻り値

This_is_just_a_test

これを達成する他の方法はありますか?


8
そして質問は?
RageZ 2009年

2
こんにちは、Stackoverflowは質疑応答サイトです。質問して他の人が答えるか、他の人からの質問に答えることができます。知識を共有したい場合は、質問してから自分で回答してください(他の人にも回答する時間を置いてから)。
mouviciel 2009年

2
私はこの知識をそのように追加すると思い、ここに保存しました。とにかく、
あなたが

回答:


175

あなたは、唯一のシェルを使用して必要にそれを行うことはできないためtrか、sed

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test

5
または、すべての非ASCII単語文字をアンダースコアに変換します${str//[^a-zA-Z0-9]/_}。どちらの方法でも、純粋なPOSIXシェルに固執しない場合は、使用可能な機能を使用してください。

同様に合法的な句読点があるかもしれません。私たちは決して知りません。
ghostdog74

このソリューションのthxは、まさに私が探していたものです。
どうも

17

これは境界線プログラミングですが、trの使用を検討してください。

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

それを行う必要があります。最初の呼び出しはスペースを圧縮し、2番目の呼び出しはアンダースコアに置き換えます。おそらく、TABやその他の空白文字を追加する必要があります。これはスペース専用です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.