我需要-
用 `\texthyphen ' 替换文档中的所有 ',但前提是它至少由一个字母限定,无论是之前还是之后,但如果之前或之后恰好是一个数字,则不需要。例如:
A-B
变成A\texthyphen B
.a-b
变成a\texthyphen b
.%-b
变成%\texthyphen b
.%-%
不变,因为它不靠近任何字母。1-2
不变,因为它接近数字。A-2
不变,因为它接近一个数字。
如何将连字符替换为\texthyphen
,但仅在字母旁边而不是数字旁边时?
sed -e 's/\([[:alpha:]]\)-\([^[:digit:]]\)/\1\\texthyphen \2/g' -e 's/\([^[:digit:]]\)-\([[:alpha:]]\)/\1\\texthyphen \2/g' -e 's/^-\([:alpha:]\)/\\texthyphen \1/'
我刚刚遇到可以处理类似 Perl 的正则表达式的ssed
(super )。sed
它应该在类似 Debian 的系统上可用,不确定其他系统。
$ echo ' A-B becomes A\texthyphen B.
a-b becomes a\texthyphen b.
%-b becomes %\texthyphen b.
%-% is unchanged, because it is not near any letter.
1-2 is unchanged, because it is near numbers.
A-2 is unchanged, because it is near one number.' | \
> ssed -R 's/(?<=[A-Za-z])-(?![0-9])|(?<![0-9])-(?=[A-Za-z])/\\texthyphen /g'
给
A\texthyphen B becomes A\texthyphen B.
a\texthyphen b becomes a\texthyphen b.
%\texthyphen b becomes %\texthyphen b.
%-% is unchanged, because it is not near any letter.
1-2 is unchanged, because it is near numbers.
A-2 is unchanged, because it is near one number.
这可能对您有用:
sed 's/\([[:alpha:]]\)-\([^[:digit:]]\)\|\([^[:digit:]]\)-\([[:alpha:]]\)/\1\3\\texthyphen \2\4/g' file