2

我有一堆文件的句子结尾是这样的:\@.Next sentence. 我想在句号之后插入一个空格。

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

因为我在句号之后检查一个字符,所以我不能只对\@.to进行替换\@.,而且因为我不知道句号后面是什么字符,所以我被卡住了。

我目前的命令:

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

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

编辑:为了记录,我使用的是sed(我正在使用 OS X)的 BSD 版本 - 从我之前关于 的问题sed来看,显然 BSD sed(或至少是 Apple 版本)并不总是与 GNU sed常用表达。

4

4 回答 4

3

正确的命令应该是这样的:

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

有了它,你匹配任何\@后跟非空格(\S)并插入一个空格(通过将整个匹配替换为'\@ '加上刚刚找到的非空格)。

于 2012-05-09T21:51:45.307 回答
1

使用这个 sed 命令:

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

或更好:

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

\@.如果后面没有任何空白字符(不仅仅是大写字母),它将插入空格。

于 2012-05-09T22:14:36.507 回答
0

这可能对您有用:

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

解释:

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

于 2012-05-10T00:07:32.910 回答
0

我认为以下是正确的:

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

仅当表达式后面没有空格时才替换它。

于 2012-05-09T21:43:20.990 回答