0

ドキュメント内の 's をすべて `\texthyphen' に置き換える必要がありますが-、前または後に少なくとも 1 文字で囲まれている場合に限ります。例えば:

  • A-BになりA\texthyphen Bます。
  • a-bになりa\texthyphen bます。
  • %-bになり%\texthyphen bます。
  • %-%どの文字にも近くないため、変更されません。
  • 1-2数値に近いので変わらない。
  • A-21 つの数値に近いため、変更されません。

ハイフンを に置き換えるにはどうすればよい\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

これはあなたのために働くかもしれません:

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

Perl のような正規表現を処理できるssed(super )に出会いました。sedDebian ライクなシステムで利用できるはずですが、他のシステムについては不明です。

$ 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 に答える