使用 sed 在句点后插入空格



我有一堆文件,其中句子结尾如下:@.Next sentence .我想在句点后插入一个空格。

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

因为我在句号后检查一个字符,所以我不能只在@.上做一个替换,@.,而且因为我不知道句号后面是什么字符,所以我卡住了。

我目前的命令:

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

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

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

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

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

除此之外,您匹配任何后跟非空格(S@并插入一个空格(通过将整个匹配替换为'@ '加上刚刚找到的非空格来制作

)。

使用此 sed 命令:

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

或更好:

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

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

这可能

对你有用:

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

解释:

如果有空格,

请将其替换为空格,否则插入空格。

我认为以下内容是正确的:

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

仅当表达式后不跟空格时,才替换表达式。

最新更新