我有一堆文件的句子结尾如下:\@.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正则表达式很好。
答案 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
说明:
如果有空格,则用空格替换它,否则插入空格。