sed: toupper un caractère sur un emplacement
-
18-09-2019 - |
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
)
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.