我有一个文件,其中包含中间带有连字符/空格的数值;需要将其替换为空格,例如: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
首先在副本上尝试一下看看。