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;
};

、などに変更Algorithmしたい。2 番目のセグメント ( ) の最初の文字を小文字に変換するにはどうすればよいですか?algorithmPublicKeypublicKey\2

アップデート

sed "s/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \2\3/g"「私の手紙」を として選択します\2が、その前に a を置く\Lと変形しすぎます ( を含む\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ので、「あなたの文字」を に切り出す場合は、その前に a を、その直後に\2a を入れることができます。\L\E

詳細については、GNUのsedドキュメントを参照してください。

GNU 拡張機能がない場合は、2 つの別個のsedコマンドでこれを行うことができます。このコマンドを使用してy、ソース キャラクタの 1 つに一致するキャラクタを、対応する宛先キャラクタに変更できます。これは Unix ユーティリティに似ていますtr

于 2010-03-09T12:14:35.550 に答える