0

我需要-用 `\texthyphen ' 替换文档中的所有 ',但前提是它至少由一个字母限定,无论是之前还是之后,但如果之前或之后恰好是一个数字,则不需要。例如:

  • A-B变成A\texthyphen B.
  • a-b变成a\texthyphen b.
  • %-b变成%\texthyphen b.
  • %-%不变,因为它不靠近任何字母。
  • 1-2不变,因为它接近数字。
  • A-2不变,因为它接近一个数字。

如何将连字符替换为\texthyphen,但仅在字母旁边而不是数字旁边时?

4

3 回答 3

2
sed -e 's/\([[:alpha:]]\)-\([^[:digit:]]\)/\1\\texthyphen \2/g' -e 's/\([^[:digit:]]\)-\([[:alpha:]]\)/\1\\texthyphen \2/g' -e 's/^-\([:alpha:]\)/\\texthyphen \1/'
于 2012-05-14T13:28:17.343 回答
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.
于 2012-05-14T13:53:39.840 回答
1

这可能对您有用:

sed 's/\([[:alpha:]]\)-\([^[:digit:]]\)\|\([^[:digit:]]\)-\([[:alpha:]]\)/\1\3\\texthyphen \2\4/g' file
于 2012-05-14T23:14:55.490 回答