ファイルのパターンを空白に置き換える必要があります

ファイルのパターンを空白に置き換える必要があります

途中にハイフン/スペースを含む数値を含むファイルがあります。これを空白に置き換える必要があります(例:333-44-5555 / 333 44 5555)。

grep '[0-9]\{3\}-[0-9]\{2\}-[0-9]\{4\}'
grep '[0-9]\{3\} [0-9]\{2\} [0-9]\{4\}'  ==> fetches me with all cases; 

しかし、それを交換する方法。

答え1

これはあなたが望むものですか(-EGNU sedやOSX / BSD sedなどのEREサポートオプションでsedを使用)。

sed -E 's/([0-9]{3})-([0-9]{2})-([0-9]{4})/\1 \2 \3/g'

たとえば、

$ echo '333-44-5555' | sed -E 's/([0-9]{3})-([0-9]{2})-([0-9]{4})/\1 \2 \3/g'
333 44 5555

-テキストにスペースに変換したくない他のコンテンツがあるとします。それ以外の場合は、tr '-' ' ' < file単純な内容だけで済みます。


以下のコメントに基づいて編集すると、これが本当に欲しいようです。

sed -E 's/[0-9]{3}[- ][0-9]{2}[- ][0-9]{4}/ /g'

答え2

 sed -i.bak 's/-/ /' filename

元のファイルのバックアップを維持しながら、ファイル全体の「-」を実際のスペースに置き換えます。

文字列全体を置き換えます。

sed  -i .bak 's/[0-9]\{3\}-[0-9]\{2\}-[0-9]\{4\}/ /'

答え3

これが私が使用するものです。元のファイルを保持し、その結果を使用して新しいファイルを作成します。

sed 's/-/ /g' file.txt > newfile.txt

まず、コピーを試して確認してください。

関連情報