Смешанные прописные и строчные буквы в слове

Поскольку вы упомянули ctrl-C, я предполагаю, что вы хотите использовать его в интерактивном терминале. Таким образом, вы можете просто дождаться ввода.

$ read

или просто используйте произвольные другие команды, которые читаются из stdin, такие как cat. Они ничего не делают до тех пор, пока нет входных данных.

$ cat >/dev/null

или даже лучше без использования stdin:

$ tail -f <<EOF
EOF
0
02.06.2017, 19:43
3 ответа

GNU sed подход:

-- начиная со строчной буквы:

s="information"
sed 's/\(.\)\(.\)/\L\1\U\2/g' <<< $s
iNfOrMaTiOn

-- начиная с прописной буквы:

s="information"
sed -E 's/(.)(.){,1}/\U\1\L\2/g' <<< $s
InFoRmAtIoN

  • \L - Превратите замену в нижний регистр, пока найдено \U или \E

  • \U — переводить замену в верхний регистр, пока не появится \L или \E найдено


gawk (GNU awk) подход:

awk -v FPAT="[a-z]" '{ s=""; for(i=1;i<=NF;i++) { s=s""((i%2)? toupper($i) : $i)} print s }' <<< $s
InFoRmAtIoN
  • FPAT="[az]" - шаблон, представляющий значение поля

Другой вариант awk с использованием split() функция:

awk  '{ n=split($0,a,""); s=""; 
      for(i=1;i<=n;i++) { s=s""((i%2)? toupper(a[i]): tolower(a[i])) } print s }' <<< $s
InFoRmAtIoN
  • split() возвращает количество созданных элементов
4
28.01.2020, 02:16

POSIXly

awk '
  {
    for(i = 1; i <= length; i++) {
      c = substr($0, i, 1)
      printf "%s", (i%2 ? toupper(c) : tolower(c))
    }
    print ""
  }' < words.txt
1
28.01.2020, 02:16
perl -pe '
   ($_ = lc) =~ s/([a-z])([^a-z]*)(.)/\L$1$2\U$3/g;
   $_ .= y/a-zA-Z/A-Za-z/r;
'
  1. Преобразовать строку ввода во все строчные буквы.
  2. Изменяйте регистр поочередно, чтобы нижний и верхний регистр символов по обе стороны от неалфавита. Это также может быть ничего, что означает, что альфа идут последовательно.
  3. Наконец, измените регистр с помощью команды y, также известной как tr, чтобы получить обе версии.

Использование

s="InformatioN"; эхо "$s" | perl -pe '....'

результаты:

iNfOrMaTiOn
InFoRmAtIoN
0
28.01.2020, 02:16

Теги

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