регулярное выражение заменить слово в camelWords

Для CentOS 6.10 следующий файл содержит конфигурацию цвета для SETCOLOR _SUCCESS, SETCOLOR _FAILURE,...

/etc/sysconfig/init

Пример:

# color => new RH6.0 bootup
# verbose => old-style bootup
# anything else => new style bootup without ANSI colors or positioning
BOOTUP=color
# column to start "[  OK  ]" label in 
RES_COL=60
# terminal sequence to move to that column. You could change this
# to something like "tput hpa ${RES_COL}" if your terminal supports it
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
# terminal sequence to set color to a 'success' color (currently: green)
SETCOLOR_SUCCESS="echo -en \\033[0;32m"
# terminal sequence to set color to a 'failure' color (currently: red)
SETCOLOR_FAILURE="echo -en \\033[0;31m"
# terminal sequence to set color to a 'warning' color (currently: yellow)
SETCOLOR_WARNING="echo -en \\033[0;33m"
# terminal sequence to reset to the default color.
SETCOLOR_NORMAL="echo -en \\033[0;39m"

Возможно, вы сможете использовать информацию и имена, чтобы найти нужные файлы в вашей системе:)

2
17.05.2020, 16:39
1 ответ

Это, вероятно, примерно в 1 000 000 раз медленнее, чем perl, но вот версия awkтолько для того, чтобы испытать ее. Но в любом случае

awk -v gzin="Foo" -v gzout="Bar" '
  BEGIN {FS=gzin;
    cb=(substr(gzin,1,1)~/[a-z]/)?"[a-z]$":"[A-Z]$"
    ca=(substr(gzin,length(gzin)-1,1)~/[a-z]/)?"^[a-z]":"^[A-Z]"
  }
  {printf $1; for (f=2; f<=NF; f++) printf ("%s%s", ((($(f-1) ~ cb) || ( $(f) ~ ca ))?gzin:gzout), $f) ; 
  print ""}' file

И это даже соответствует комментариям

ifootest // not replace this foo
Ifootest // not replace this foo
IbarTest // << replace this bar
I bar Test // << replace this bar
I_bar_Test // << replace this bar

и с-v gzin="Foo" -v gzout="Bar"

IFootest // not replace
IFooTest // not replace
iBarTest // replace
i Bar Test //replace
I_Bar_Test // replace        

Прохождение

awk -v gzin="Foo" -v gzout="Bar" '

Загрузите совпадение gzinи замену gzoutкак переменные

  BEGIN {FS=gzin;

Разделить наgzin

    cb=(substr(gzin,1,1)~/[a-z]/)?"[a-z]$":"[A-Z]$"

Проверьте регистр первого символа gzinи настройте регулярное выражение, соответствующее ему

    ca=(substr(gzin,length(gzin)-1,1)~/[a-z]/)?"^[a-z]":"^[A-Z]"

То же самое с последним символом

  }
  {printf $1; for (f=2; f<=NF; f++) printf ("%s%s", ((($(f-1) ~ cb) || ( $(f) ~ ca ))?gzin:gzout), $f) ; 

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

  print ""}' file

Конец каждой строки

PS Кажется, я повредил себе мозг

0
28.04.2021, 23:13

Теги

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