REGEXP: Используйте первую букву слова, начинающегося с цифр. - PullRequest
2 голосов
/ 03 октября 2019

Я хотел бы найти способ использовать первую букву слова, начинающегося с цифр.

Ввод:

2019donaldtrump
03012019paris

Ожидаемый результат:

2019Donaldtrump
03012019Paris

Есть ли способ изменить эту команду

sed -e 's/^\(.\)/\U\1/g'

, чтобы она искала первую действительную букву слова?

Большое спасибо

Ответы [ 5 ]

5 голосов
/ 03 октября 2019

Похоже, что вы делаете то, что вы хотите в моем тестировании:

sed -e 's/\([[:digit:]]\)\([a-z]\)/\1\U\2/g' input.txt

Ввод:

2019donaldtrump
03012019paris

Выход:

2019Donaldtrump
03012019Paris

Редактировать: Как указывает Toto , группировка на самом деле не нужна:

sed -e 's/[[:digit:]][a-z]/\U\0/g' input.txt
2 голосов
/ 03 октября 2019

Один в awk:

$ awk 'BEGIN{FS=OFS=""}/^[0-9]/ && match($0,/[a-z]/){$RSTART=toupper($RSTART)}1' file

Вывод:

2019Donaldtrump
03012019Paris
notstartingwith123

Объяснено:

$ awk 'BEGIN {
    FS=OFS=""                     # separators to empty
}
/^[0-9]/ && match($0,/[a-z]/) {   # if there is starting digit and lower case letters
    $RSTART=toupper($RSTART)      # capitalize the first letter
}1' file                          # output

Короче, match вернет RSTART какего значение, сохраните и используйте это вместо:

$ awk 'BEGIN{FS=OFS=""}/^[0-9]/&&r=match($0,/[a-z]/){$r=toupper($r)}1' file
1 голос
/ 03 октября 2019

Это может работать для вас (GNU sed):

sed 's/\<[[:digit:]]\+[[:alpha:]]/\U&/' file

Это будет заглавная буква первого буквенного символа слова, начинающегося с цифр.

0 голосов
/ 03 октября 2019

С GNU sed для \U:

$ sed 's/[[:alpha:]]/\U&/' file
2019Donaldtrump
03012019Paris
0 голосов
/ 03 октября 2019

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

awk 'match($0,/[0-9]+/){
  print substr($0,RSTART,RLENGTH) toupper(substr($0,RSTART+RLENGTH+1,1)) substr($0,RSTART+RLENGTH+2)}
' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...