临时文件中只包含数字22.5。
我用
sed 's/.//' Temp
我希望225但是得到2.5
为什么?
答案 0 :(得分:7)
点是一个特殊字符,意思是“匹配任何字符”。
$ sed s/\\.// temp
225
你会认为你可以做sed s/\.// temp
,但你的shell会逃脱那个单反斜杠并将s/.//
传递给sed ..所以,你需要放两个反斜杠来传递一个字面反斜杠到sed ,它会将\.
正确地视为文字点。或者,您可以引用命令来保留文字反斜杠:
$ sed "s/\.//" temp
225
当您执行s/.//
时获得2.5的原因是该点与文件中的第一个字符匹配并将其删除。
答案 1 :(得分:3)
因为'。'是一个匹配任何字符的正则表达式。你想要's/\.//'
答案 2 :(得分:1)
.
是任何字符的通配符,因此第一个字符被替换为空,然后sed完成。
你想要sed 's/\.//' Temp
。反斜杠用于转义特殊字符,以便重新获得面值。
答案 3 :(得分:0)
''很特别:它匹配任何单个字符。所以在你的情况下,sed表达式匹配行上的第一个字符。试着像这样逃避它:
取值/\.//
答案 4 :(得分:0)
你也可以使用awk
awk '{sub(".","")}1' temp