3

データに一連のトークンがあり、末尾の を削除したいの".[0-9]"ですが、正規表現を適切に引用する方法がわかりません。最初の一致は まで.で、2 番目の一致は.と の数字です。初戦は残すつもりです。

data="thing thing__aaa.0 thing__bbb.3 thing__ccc.5 other_aaa other_bbb other_ccc.5"
data=`echo $data | sed s/\([a-zA-Z0-9_]+\)\(\.[0-9]\)/\1/g`
echo $data

実際の出力:

thing thing__aaa.0 thing__bbb.3 thing__ccc.5 other_aaa other_bbb other_ccc.5

望ましい出力:

thing thing__aaa thing__bbb thing__ccc other_aaa other_bbb other_ccc

引用符で囲まれていない([a-zA-Z0-9_]+)が最初に一致するグループであり、 が に(\.[0-9])一致するという考え方です.number。これにより、\1両方のグループが最初のグループに置き換えられます。

4

3 に答える 3

1

ちょうどどうですか

echo $data | sed 's/\.[0-9]//g'

または、number にそれ以上の桁数が含まれる可能性がある場合は、

echo $data | sed 's/\.[0-9]\+//g'
于 2012-11-23T16:42:53.283 に答える
0

フォームのすべての文字列を削除したいだけのようです\.[0-9]。それでは、次のことをしてみませんか。

sed 's/\.[0-9]+\b//g'

\b(これは gnu sedと拡張機能に依存して+います。他の sed の場合は、次のことができます。

sed 's/\.[0-9][0-9]*\( \|$\)/\1/g'
于 2012-11-23T16:50:14.110 に答える
-1

通常、シェル固有の拡張機能の使用はお勧めしませんが、bash を使用している場合は、配列を使用することをお勧めします。

bash$ data=(thing thing__aaa.0 thing__bbb.3)
bash$ echo "${data[@]%.[0-9]*}"

これにより、すべてが数字ではない内線番号 (つまりfoo.34bb) も削除されることに注意してください。ただし、おそらくニーズには十分です。)

于 2012-11-23T17:08:01.243 に答える