sed:替换特定位置的空间

时间:2015-02-08 09:47:31

标签: regex bash shell sed

我想替换"abc "位置4中的空格字符,该位置的其他字符应保持不变。仅匹配空间似乎不起作用:

$ echo "abc " | sed "s/\ /d/4"
abc

.匹配似乎是这样做的,但它的匹配范围太广了我的情况:

$ echo "abc " | sed "s/./d/4"
abcd

我是否遗漏了有关sed或其正则表达风格的详细信息?

4 个答案:

答案 0 :(得分:2)

您可以使用范围量词\{min,max\}\{num\}

$ echo "abc " | sed 's/^\(.\{3\}\) /\1d/'
abcd

^断言我们刚开始。 \(..\)称为捕获组。 .\{3\}正好匹配三个字符,这三个字符由组索引1捕获。稍后我们可以通过反向引用来引用这些捕获的字符。

答案 1 :(得分:2)

您正在尝试替换第4个空格实例,在这种情况下它不是。 echo "abc " | sed "s/ /d/"

如果你的文字中至少有4个空格,那就可以了。

编辑:如果您需要替换第4个字符,可以执行以下操作:echo "abc " | sed "s/./d/4"

这意味着“用d替换任何字符的第4个实例。”

答案 2 :(得分:1)

使用perl

执行此操作的另一种方法
echo "abc " | perl -pe 's/...\K /d/'
abcd

聚苯乙烯。 \K是积极的支持。

答案 3 :(得分:0)

如果你想替换它。

$ echo "abc " |sed -r 's/ /d/1'

上面的命令将搜索第一个出现的空格字符并将其替换为d,对于您的情况,您可以将其替换为您想要的任何内容。