sed 在两个或多个大写字母之间添加点并且大写字母后面不跟小写字母

问题描述 投票:0回答:1

我需要 sed 方面的帮助

两个命令

  1. 在两个或多个大写字母之间添加点
  2. 大写字母后面不跟小写字母。

我正在尝试任何两个或多个大写字母之间有点。

A [公元前] XYZ

A [公元前。] X.Y.Z.

我最接近的是

echo "abcd Abcd ABcd ABCd ABCD" | sed -e "s/[A-Z]\{2\}/&./g"
abcd Abcd AB.cd AB.Cd AB.CD.

如果更容易的话,另一个单独的命令可以在任何大写字母之间添加一个点,后面不跟小写字母。

抗体 [A] D6 胎儿生长激素 X”

抗体 [A。] D.6。 F.G.H. X.”

我最接近的

echo "abcd Abcd ABcd ABCd ABCD" | sed -e "s/[A-Z][^a-z]/&./g"
abcd Abcd AB.cd AB.Cd AB.CD.

regex sed
1个回答
0
投票

标准

sed
正则表达式没有复杂的前瞻功能,因此不够强大,无法一次性完成此操作。它需要某种循环。


两个或多个大写字母(彼此相邻)之间有点:

$ echo 'A [BC] XYZ' | sed '
    :a
    s/\([A-Z]\)\([A-Z]\)/\1.\2/g
    ta
'
A [B.C] X.Y.Z
$

在后面不跟小写字母的任何大写字母之间添加一个点:

$ echo 'Ab [A] D6 FGH X"Z' | sed '
    :a
    s/\([A-Z]\)\([^\na-z]\|$\)/\1\n\2/g
    ta
    y/\n/./
'
Ab [A.] D.6 F.G.H. X."Z.
$
© www.soinside.com 2019 - 2024. All rights reserved.