Question

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

sera TRANSFOR cette

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

dans ce

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

Je souhaite modifier Algorithm à algorithm, PublicKey à publicKey et ainsi de suite. Comment puis-je transformer le premier caractère du second segment (\2) en minuscules?

UPDATE

sed "s/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \2\3/g" sélectionne « ma lettre » comme \2, mais si je place un \L avant qu'il ne se transforme trop (y compris \3)

Était-ce utile?

La solution

est ici une solution awk

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

output

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

si vous préférez encore sed, voici une modification de votre version, ajoutant \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;
};

Autres conseils

Ceci est presque identique à inférieur à palier supérieur cas en utilisant sed .

EDIT: La question / réponse il utilise la \L GNU extension sed. La conversion commencé par \L peut être désactivée par \E, donc si vous taquinez sur « votre lettre » dans \2, vous pouvez mettre un \L avant et un \E immédiatement après.

Voir la GNU documentation sed pour plus d'informations.

Si vous ne disposez pas d'extensions GNU, vous pouvez le faire avec deux commandes séparées sed. Vous pouvez utiliser la commande y pour modifier un caractère qui correspond à l'un d'un caractère source dans un caractère de destination correspondant. Ceci est similaire à la tr utilitaire Unix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top