Bash :CTRL+A выводит ^A на стандартный вывод

Сawk:

awk 'BEGIN{print gsub(ARGV[2], "&", ARGV[1])}' abcsdabcsdabc abc

Обратите внимание, что шаблон (здесьabc)принимается awkкак расширенное регулярное выражение (, как будто используется grep -E/egrep).

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

Использовать perlрегулярные выражения (, подобные GNU grep -P's):

perl -le 'print scalar (() = $ARGV[0] =~ m{$ARGV[1]}g)' -- abcsdabcsdabc abc

(обратите внимание, однако, что аргументы не интерпретируются как текст в соответствии с кодировкой локали. Например, в локали UTF -8 с éи .в качестве аргументов он будет сообщать 2 (байта )вместо 1 (символа )).

С помощью zshвы можете сделать:

occurrences() {
  set -o localoptions -o extendedglob

  local n=0
  : ${1//(#m)$2/$((++n))}
  echo $n
}

occurrences abcsdabcsdabc abc

Здесь второй аргумент(abc)интерпретируется как фиксированная строка; замените $2на $~2, чтобы он интерпретировался как расширенный шаблон zsh glob вместо (с более широким набором функций, чем расширенные регулярные выражения, но с другим синтаксисом ).

0
04.07.2020, 13:54
1 ответ

Я бы предположил, что вы непреднамеренно изменили схему редактирования строк со стандартного «emacs» на «vi».

Вы можете сбросить это обратно с помощью

set -o emacs

Или верните его в режим viс помощью

set -o vi
2
18.03.2021, 23:22

Теги

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