Для сопоставления шаблонов подстановок в операторе if, начинающемся с дефиса-()

Используя редактор sedразновидности GNU, мы можем сделать это следующим образом:

sed -Ee '
    $d;N
    /\s(\S+)\n.*\s\1$/!p
    D
' input.file

Мы постоянно переносим две строки в пространство шаблонов, N, и ищем переход последнего поля. Как только мы обнаруживаем один, /\s(\S+)\n.*\s\1$/!p, мы печатаем все пространство шаблонов. Затем мы удаляем первую часть Dпространства шаблонов в обоих сценариях с переходом или без перехода, поскольку на этом этапе использование первой части заканчивается.

Управление переходит к началу кода sed и, если мы еще не достигли eof, мы повторяем эту процедуру снова и снова. Eof останавливает операцию, $d.

Выход:

A 20 30 loss
A 30 40 no
A 60 70 no
A 70 80 gain
2
04.06.2021, 11:07
1 ответ

Сопоставление с образцом выполняется с помощью конструкции caseв оболочках POSIX:

CHANNELS=
set -- stable beta dev master --debug

echo "DEBUG: Before while $@";
while [ "$#" -gt 0  ]; do
  echo "DEBUG: Inside while $1";
  case $1 in
    (-*) ;;
    (*)
      echo "DEBUG: Inside case (*)"
      CHANNELS="$CHANNELS $1";;
  esac
  shift
done
echo "DEBUG: After while $CHANNELS";
4
28.07.2021, 11:27

Теги

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