10

私はこのテキストをファイルに持っています

"0000000441244"
"0000000127769"

すべてのゼロを「L」に置き換えたい

私はこれを試していますが、何も変更されません

sed -e 's/0+/L/g' regex.txt

sed -e 's/(0+)/L/g' regex.txt

どこが間違っているのか知りたい

4

5 に答える 5

14

Posix準拠バージョンは次00*の代わりに使用する必要があります0+

sed -e 's/00*/L/g' regex.txt

gちなみに、フラグは、に変換したい場合、"000000012700009"またはに"000000012709"変換したい場合にのみ必要です"L127L9"。それ以外の場合、*in's/00*/L/'にはとにかく最初にすべてゼロが含まれます。

于 2013-01-07T05:05:16.847 に答える
5

Linux(GNUバージョンのsed)では、両方とも機能sed -e 's/0\+/L/g' regex.txtsed -r 's/0+/L/g' regex.txtますが、Mac(BSDバージョンのsed)を使用している場合は、どちらも機能しません。代わりに、次を使用する必要があります sed -E 's/0+/L/g' regex.txt

実際、最後のものはLinuxでも機能するので、より移植性があります。この特定の問題については、@perrealの提案も移植可能です。ただし+、正規表現で必要なメタ文字やその他のメタ文字が必要な場合は、それを回避する方法を知っておくとよいでしょう。

于 2013-01-07T05:02:38.200 に答える
1

これを試して

sed -e 's/0\+/L/g' regex.txt
于 2013-01-07T04:57:14.687 に答える
0

GNU以外のUnixのフレーバーを使用している場合は、GNU sedを自分でインストールするか、またはに切り替えることができawkます。rubyperl

例えば:

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.
于 2013-01-07T05:00:50.800 に答える
0

これはあなたのために働くかもしれません(GNU sed):

sed 'y/0/L/' file
于 2013-01-07T06:46:08.743 に答える