Linux的基本SED问题

时间:2009-10-31 16:39:28

标签: sed

临时文件中只包含数字22.5。

我用

sed 's/.//' Temp

我希望225但是得到2.5

为什么?

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