需要用空格替换文件中的模式

需要用空格替换文件中的模式

我有一个文件,其中包含中间带有连字符/空格的数值;需要将其替换为空格,例如: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启用 ERE 选项的 sed,例如 GNU sed 和 OSX/BSD 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

首先在副本上尝试一下看看。

相关内容