1

sed "s/public \(.*\) get\(.*\)()/\1 \2/g"

将为此转换

public class ChallengeTO extends AbstractTransferObject {
        public AuthAlgorithm getAlgorithm();
        public long getCode();
        public int getIteration();
        public String getPublicKey();
        public String getSelt();
};

进入这个

public class ChallengeTO extends AbstractTransferObject {
        AuthAlgorithm Algorithm;
        long Code;
        int Iteration;
        String PublicKey;
        String Selt;
};

我想更改Algorithmalgorithm, PublicKeytopublicKey等等。如何将第二段 ( \2) 的第一个字符转换为小写?

更新

sed "s/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \2\3/g"选择“我的信”为\2,但如果我\L在它之前放置 a ,它会转换太多(包括\3

4

2 回答 2

1

这是一个 awk 解决方案

awk '
$1=="public" && $3~/^get/ {
    sub(/^get/,"",$3)
    $3=tolower( substr($3,1,1) ) substr($3,2)
    $0="\t"$2" "$3
}1' file

输出

$ cat file
public class ChallengeTO extends AbstractTransferObject {
        public AuthAlgorithm getAlgorithm();
        public long getCode();
        public int getIteration();
        public String getPublicKey();
        public String getSelt();
};

$ ./shell.sh
public class ChallengeTO extends AbstractTransferObject {
        AuthAlgorithm algorithm();
        long code();
        int iteration();
        String publicKey();
        String selt();
};

如果您仍然喜欢 sed,这里是对您的版本的修改,添加\l

$ sed 's/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \l\2\3/g' file
public class ChallengeTO extends AbstractTransferObject {
        AuthAlgorithm algorithm;
        long code;
        int iteration;
        String publicKey;
        String selt;
};
于 2010-03-09T12:13:03.860 回答
1

这与使用 sed 的从大写到小写几乎相同。

编辑:那里的问题/答案使用\LGNUsed扩展。开始的转换\L可以通过 关闭\E,所以如果你将“你的信”梳理成\2,你可以在它之前放一个\L,在它\E之后放一个。

有关更多信息,请参阅GNUsed文档

如果您没有 GNU 扩展,则可以使用两个单独的sed命令来执行此操作。您可以使用该y命令将匹配源字符之一的字符更改为相应的目标字符。这类似于 Unix 实用程序tr

于 2010-03-09T12:14:35.550 回答