Лучший способ сделать нахождение/заменение в нескольких файлах?

На основе комментариев @dur я изменил свой код, чтобы использовать SecurityContextHolder и получить текущую авторизацию контекста потока.

Мой компонент теперь:

    @Component
    public class AuthRequestInfo {

        private AuthorizationService authorizationService;

        public AuthRequestInfo(AuthorizationService authorizationService) {
            this.authorizationService = authorizationService;
        }

        public Authorization getAuthorization(){
            Claims claims = (Claims)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            String key = claims.get(KEY_CLAIM).toString();
            return this.authorizationService.findByExampleOptional(Authorization.builder().key(key).build())
                    .orElseThrow(new UnauthorizedException(INVALID_TWOFACE_AUTHORIZATION_HEADER));
        }

    }

Проверка подлинности SecurityContextHolder была установлена ​​на GenericFilterBean. Теперь у меня нет проблем.

41
задан Ulysse BN 25 June 2019 в 17:24
поделиться

3 ответа

find . -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'

первая часть этого является командой находки для нахождения файлов, которые Вы хотите изменить. Вы, возможно, должны изменить это соответственно. Эти xargs команда берет каждый файл найденная находка и применяется эти sed команда к нему. Эти sed команда берет каждый экземпляр от и заменяет его к . Это - стандартное регулярное выражение, поэтому измените его, как Вам нужно.

, Если Вы используете svn, остерегаются. Ваши .svn-каталоги будут поиском и замененный также. Необходимо исключить их, например, как это:

find . ! -regex ".*[/]\.svn[/]?.*" -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'

или

find . -name .svn -prune -o -type f -print0 | xargs -0 -n 1 sed -i -e 's/from/to/g'
37
ответ дан Ulysse BN 27 November 2019 в 00:16
поделиться

Как Paul сказал, Вы хотите сначала найти файлы, Вы хотите отредактировать и затем отредактировать их. Альтернатива находке использования должна использовать GNU grep (значение по умолчанию на Ubuntu), например:

grep -r -l from . | xargs -0 -n 1 sed -i -e 's/from/to/g'

можно также использовать ack-grep (sudo склонный - получают установку ack-grep или посещают http://petdance.com/ack/ ) также если Вы знаете, что только хотите определенный тип файла и хотите проигнорировать вещи в каталогах управления версиями. например, если Вы только хотите текстовые файлы,

ack -l --print0 --text from | xargs -0 -n 1 sed -i -e 's/from/to/g'
# `from` here is an arbitrary commonly occurring keyword

, альтернатива использованию sed должна использовать жемчуг, который может обработать несколько файлов на команду, например,

grep -r -l from . | xargs perl -pi.bak -e 's/from/to/g'

Здесь, жемчугу говорят отредактировать на месте, делая .bak файл сначала.

можно объединить любую из левых сторон канала с правыми сторонами, в зависимости от предпочтения.

37
ответ дан Reinstate Monica 27 November 2019 в 00:16
поделиться
comment() { 
}
doc() { 
}
function agr { 
doc 'usage: from=sth to=another agr [ag-args]'
comment -l --files-with-matches

ag -0 -l "$from" "${@}" | pre-files "$from" "$to"
}
pre-files() {
doc 'stdin should be null-separated list of files that need replacement; $1 the string to replace, $2 the replacement.'
comment '-i backs up original input files with the supplied extension (leave empty for no backup; needed for in-place replacement.)(do not put whitespace between -i and its arg.)'
comment '-r, --no-run-if-empty
              If  the  standard input does not contain any nonblanks,
              do not run the command.  Normally, the command  is  run
              once  even  if there is no input.  This option is a GNU
              extension.'

AGR_FROM="$1" AGR_TO="$2" xargs -r0 perl -pi.pbak -e 's/$ENV{AGR_FROM}/$ENV{AGR_TO}/g'
}

можно использовать его как это:

from=str1 to=sth agr path1 path2 ...

Предоставление никакие пути, чтобы заставить его использовать текущий каталог. Обратите внимание, что ag, xargs, и жемчуг должны быть установлены и на ПУТИ.

0
ответ дан 27 November 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: