С заглавной буквы в той же позиции в терминале - PullRequest
2 голосов
/ 28 марта 2019

У меня есть несколько .py файлов, которые содержат такую ​​строку:

self._cols = [self.foo.bar.relevant_string.str()]

Мне нужно набрать relevant_string, чтобы получить

self._cols = [self.foo.bar.RELEVANT_STRING.str()]

во всех ~ 100 из них.

Есть ли способ сделать это с помощью bash / awk / perl? Я пробовал что-то вроде этого

perl  -pe 's/self.foo.bar./uc($&)/e' *.py

Но оно заняло заглавную область, а не часть после.

Ответы [ 5 ]

3 голосов
/ 28 марта 2019

С GNU sed:

$ echo 'self._cols = [self.foo.bar.relevant_string.str()]' |
    sed -E 's/(self\.foo\.bar\.)([^.]+)/\1\U\2/'
self._cols = [self.foo.bar.RELEVANT_STRING.str()]
2 голосов
/ 28 марта 2019

Еще один Perl, использующий поддержку

$ echo "self._cols = [self.foo.bar.relevant_string.str()]" |
    perl -pe 's/(?<=self.foo.bar.)(\w+)/uc($1)/ge'
self._cols = [self.foo.bar.RELEVANT_STRING.str()]
$
2 голосов
/ 28 марта 2019

Вы можете использовать \K после своего паттерна, чтобы пропустить его из совпадения и сопоставить с той частью, которая вам нужна, чтобы изменить регистр использования \w+ (который соответствует 1 или более буквам, цифрам или подчеркиванию):

perl -i -pe 's/self\.schemata\.usage\.\K\w+/uc($&)/e' *.py

См. онлайн демо :

s="self._cols = [self.schemata.usage.relevant_string.str()]"
perl -pe 's/self\.schemata\.usage\.\K\w+/uc($&)/e' <<< "$s"
# => self._cols = [self.schemata.usage.RELEVANT_STRING.str()]
1 голос
/ 28 марта 2019

Не могли бы вы попробовать следующее.

awk '
match($0,/self\.foo\.bar\.[^.]*/){
  print substr($0,1,RSTART+12) toupper(substr($0,RSTART+13,RLENGTH-13)) substr($0,RSTART+RLENGTH)
  next
}
1
'  Input_file

Вывод будет следующим.

self._cols = [self.foo.bar.RELEVANT_STRING.str()]
0 голосов
/ 07 апреля 2019

используйте Perl 5 или GNU SED

perl -i -pe 's/(self.foo.bar.)(\w+)/\1\U\2/g' *.py

идентично просто замените 'perl -i -pe' на

sed -i -E 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...