私は以下を使用しています:
$ echo ".a.b.c." | awk '
{
t=gensub(/.([a-z])./,"[\\1]","g",$1); print t
}'
[a]b[c]
私はそれを終了したい[a][b][c]
。gensub
重複一致処理を開始するにはどうすればよいですか?
これができない場合、どうすればこれを達成できますか?
ベストアンサー1
次のようにできます。
perl -pe 's{\.([a-z](?:\.[a-z])*)\.}{"[$1]" =~ s/\./][/gr}ge'
つまり、すべてをに変更し、.x.y.z.
sを[x.y.z]
に.
置き換えます][
。
またawk
、gensub()
成功の有無を教えてくれないので、具体的で使いにくいgawkの使用を避けてください。
awk '
{
while(match($0, /(\.[abcdefghijklmnopqrstuvwxyz])+\./)) {
s = substr($0, RSTART + 1, RLENGTH - 2)
gsub(/\./, "][", s)
$0 = substr($0, 1, RSTART - 1) "["s"]" substr($0, RSTART+RLENGTH)
}
print
}'
現在のバージョンmawk
(まだローカライズされていない)または最新バージョンを使用している場合、またはgawk
Cロケールの場合abcdefghijklmnopqrstuvwxyz
に置き換えることができますa-z
。これらの条件を超えた場合、同一であるという保証はありません。特に、一部のロケールでは、[a-z]
各 POSIX は次の順序に一致するように設計されています。要素の構成、いいえ数値ddzs
ハンガリー語のロケールのように複数の文字を一致させることもできます。
とにかく正規表現で文字通りのポイントを一致させるには、\.
またはが必要です[.]
。.
それ以外の場合は、それ自体が単一文字に一致する正規表現演算子です。