私はこのテキストをファイルに持っています
"0000000441244"
"0000000127769"
すべてのゼロを「L」に置き換えたい
私はこれを試していますが、何も変更されません
sed -e 's/0+/L/g' regex.txt
sed -e 's/(0+)/L/g' regex.txt
どこが間違っているのか知りたい
Posix準拠バージョンは次00*
の代わりに使用する必要があります0+
:
sed -e 's/00*/L/g' regex.txt
g
ちなみに、フラグは、に変換したい場合、"000000012700009"
またはに"000000012709"
変換したい場合にのみ必要です"L127L9"
。それ以外の場合、*
in's/00*/L/'
にはとにかく最初にすべてゼロが含まれます。
Linux(GNUバージョンのsed)では、両方とも機能sed -e 's/0\+/L/g' regex.txt
しsed -r 's/0+/L/g' regex.txt
ますが、Mac(BSDバージョンのsed)を使用している場合は、どちらも機能しません。代わりに、次を使用する必要があります
sed -E 's/0+/L/g' regex.txt
。
実際、最後のものはLinuxでも機能するので、より移植性があります。この特定の問題については、@perrealの提案も移植可能です。ただし+
、正規表現で必要なメタ文字やその他のメタ文字が必要な場合は、それを回避する方法を知っておくとよいでしょう。
これを試して
sed -e 's/0\+/L/g' regex.txt
GNU以外のUnixのフレーバーを使用している場合は、GNU sedを自分でインストールするか、またはに切り替えることができawk
ます。ruby
perl
例えば:
ruby -e 'ARGF.each{|l|puts l.gsub(/0+/, "L")}' regex.txt
awkの使用:
awk '{gsub("0+", "L"); print $0}' regex.txt
拡張正規表現は、Mac OS/X-E
ではではなく経由で使用できます-e
。
「BSD一般コマンドマニュアル」から:
-E Interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's). The re_format(7) manual page fully describes both formats.
これはあなたのために働くかもしれません(GNU sed):
sed 'y/0/L/' file