我想替换"abc "
位置4中的空格字符,该位置的其他字符应保持不变。仅匹配空间似乎不起作用:
$ echo "abc " | sed "s/\ /d/4"
abc
与.
匹配似乎是这样做的,但它的匹配范围太广了我的情况:
$ echo "abc " | sed "s/./d/4"
abcd
我是否遗漏了有关sed
或其正则表达风格的详细信息?
答案 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
,对于您的情况,您可以将其替换为您想要的任何内容。