使用sed在句点之后插入空格

时间:2012-05-09 21:38:42

标签: regex macos sed

我有一堆文件的句子结尾如下:\@.Next sentence。我希望在这段时间后插入一个空格。

并非所有\@.出现的空格都没有,所以我的正则表达式会检查句点之后的下一个字符是否为大写字母。

因为我在一段时间之后检查了一个字符,所以我不能只在\@.\@.进行替换,因为我不知道这段时间后的字符是什么,我被卡住了。

我目前的命令:

sed -i .bak -E 's/\\@\.[A-Z]/<SOMETHING IN HERE>/g' *.tex

如何获取匹配字符串的最后一个字母以用于替换正则表达式?

编辑:为了记录,我使用的是sed的BSD版本(我正在使用OS X) - 来自我的previous question regarding sed,显然是BSD sed(或者至少是Apple版本) )并不总是与GNU sed正则表达式很好。

4 个答案:

答案 0 :(得分:3)

正确的命令应该是:

sed -i.bak -E "s/\\\@.(\S)/\\\@. \1/g" *.tex

随之而来的是,你匹配任何\@后面跟着非空格(\S)并插入一个空格(通过用'\@ '替换整个匹配加上非空格来做的是什么实测值)。

答案 1 :(得分:1)

使用此sed命令:

sed -i.bak -E 's/(\\@\.)([A-Z])/\1 \2/g' *.tex

或更好:

sed -i.bak -E 's/(\\@\.)([^ \t])/\1 \2/g' *.tex
如果\@. 后面没有任何空白字符(不仅仅是大写字母),

会插入空格。

答案 2 :(得分:0)

我认为以下是正确的:

s/\\@\.[^\s]/\\@. /g

如果表达式后面没有空格,则只替换表达式。

答案 3 :(得分:0)

这可能对您有用:

sed -i .bak -E 's/\\@\. \?/\\@. /g' *.tex

说明:

如果有空格,则用空格替换它,否则插入空格。