СЭД:переместить персонажа на локацию
-
18-09-2019 - |
Вопрос
Этот
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
к algorithm
, PublicKey
к publicKey
и так далее.Как я могу преобразовать первый символ второго сегмента (\2
) в нижний регистр?
ОБНОВЛЯТЬ
sed "s/public \(.*\) get\([A-Z]\)\(.*\)()/\1 \2\3/g"
выбирает «моё письмо» как \2
, но если я помещу \L
перед этим он слишком многое трансформирует (в том числе \3
)
Решение
вот 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;
};
Другие советы
Это почти идентично Преобразование верхнего и нижнего регистра с использованием sed.
РЕДАКТИРОВАТЬ:В вопросе/ответе используется \L
ГНУ sed
расширение.Преобразование, начатое \L
можно отключить с помощью \E
, поэтому, если вы выделите «ваше письмо» в \2
, вы можете поставить \L
перед этим и \E
сразу после него.
См. ГНУ sed
документация Чтобы получить больше информации.
Если у вас нет расширений GNU, вы можете сделать это с помощью двух отдельных sed
команды.Вы можете использовать y
Команда для изменения символа, соответствующего одному из исходных символов, на соответствующий целевой символ.Это похоже на утилиту Unix tr
.