Вопрос

Этот

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top