sed:在一个位置上插入一个角色

sed:在一个位置上插入一个角色,sed,text-processing,uppercase,lowercase,Sed,Text Processing,Uppercase,Lowercase,这个 你会喜欢这个吗 sed "s/public \(.*\) get\(.*\)()/\1 \2/g" 进入这个 public class ChallengeTO extends AbstractTransferObject { public AuthAlgorithm getAlgorithm(); public long getCode(); public int getIteration(); public String

这个

你会喜欢这个吗

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();
};
我想将
算法
更改为
算法
公钥
更改为
公钥
等等。如何将第二段(
\2
)的第一个字符转换为小写

更新

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

这里有一个awk解决方案

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

awk '
$1=="public" && $3~/^get/ {
    sub(/^get/,"",$3)
    $3=tolower( substr($3,1,1) ) substr($3,2)
    $0="\t"$2" "$3
}1' file
如果您仍然喜欢sed,这里将对您的版本进行修改,添加
\l

$ 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();
};

这几乎是相同的

编辑:那里的问题/答案使用
\L
GNU
sed
扩展名。由
\L
开始的转换可以由
\E
关闭,因此如果您将“您的信”梳理成
\2
,您可以在它前面放一个
\L
,在它后面放一个
\E

有关更多信息,请参阅


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

我相信sed one-liner应该可以解决我的问题。只有当sed的方式变得太复杂时,我才不会去awk。其余的都由
\L
来转换<代码>公钥进入
公钥
公钥
。用这些信息更新问题+1编辑的第一部分非常棒。非常感谢。我很难过,我不能给更多的分数:-)。第二个不依赖于位置,所以对我来说不好。
$ 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;
};