sed パターンの後に 1 文字以上が続きます。

sed パターンの後に 1 文字以上が続きます。

"uid="パターンを1文字以上に1回以上変更したいと思います。だから私は次のコマンドを使います。

sed s/uid=.+/uid=something/g file

しかし、これはうまくいきません。 「1文字の後に1回以上」が正しくないようです。.+

理由をご存知ですか?

答え1

BSDsedまたは最新バージョンの GNU および busybox の場合、sed次のものを使用できます。

sed -E 's/uid=.+/uid=something/'

単一文字を複数回一致させます。

有効な-Eフラグsed拡張正規表現。それがなければ得るでしょう基本正規表現。 2 つの正規表現構文セットは基本的に同じですが、若干異なる構文を使用し、拡張セットはより多くの演算子をサポートします。

これは置き換えられます

uid=110

そして

uid=something

似合いたい場合同じBSD用以外の文字sed

sed -E 's/uid=(.)\1*/uid=something/'

これは置き換えられます

uid=110

そして

uid=something0

標準EREには逆参照はありません。 GNUはsedそれを拡張としてサポートしていますが、BSDはサポートしていませんsed。ただし、逆参照は標準BREの機能なので、次のことができます。

sed 's/uid=\(.\)\1*/uid=something/'

持ち歩ける。

答え2

sed 's/uid=..*/uid=something/g' file

または:

sed 's/uid=.\{1,\}/uid=something/g' file

posix sedの場合

関連情報