途中にハイフン/スペースを含む数値を含むファイルがあります。これを空白に置き換える必要があります(例: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
これはあなたが望むものですか(-E
GNU 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
まず、コピーを試して確認してください。