我有一堆文件,其中句子结尾如下:@.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
仅当表达式后不跟空格时,才替换表达式。