Просто используйте флаги:
$ awk '/PATTERN1/{flag=2;next} flag; /PATTERN2/{flag--}' file
a
b
c
PATTERN2
d
e
f
PATTERN2
То есть: когда вы найдете ШАБЛОН1
, установите флаг в положительное значение; в частности, 2. Затем, когда вы найдете ШАБЛОН2
, уменьшите этот флаг на один. Таким образом, он иссякнет после второго матча. Между ними используйте флаг
как значение, которое запускает {print $ 0}
, когда оно имеет истинное значение (2 или 1).
Используйте
$ env pwd
или
$ /bin/pwd
Если не установлена переменная POSIXLY_CORRECT, и в этом случае вам нужно добавить -P
.
Подробности:
Оболочка имеет встроенную команду pwd
, которая по умолчанию выводит значение $ PWD
оболочки. При этом он может включать логических путей (по умолчанию -L
).
Если вы вызываете встроенную с помощью ( -P
) или используете внешний / bin / pwd
:
$ ln -s . /tmp/here; cd /tmp/here/here/here
$ pwd
/tmp/here/here/here
$ pwd -P
/tmp
$ /bin/pwd
/tmp
Причина в том, что внешний / bin / pwd
по умолчанию используется параметр -P
.
Из info pwd
:
эта реализация использует
-P 'по умолчанию, если не установлена переменная среды
POSIXLY_CORRECT'.
pwd -P
(в любой оболочке POSIX) - это команда, которую вы ищете.
-P
предназначен для физического (в отличие от логического ( -L
, по умолчанию), где pwd
в основном) выгружает содержимое $ PWD
(которое оболочка поддерживает на основе аргументов, которые вы даете cd
или pushd
)).
$ ln -s . /tmp/here
$ cd /tmp/here/here
$ cd ../here/here
$ pwd
/tmp/here/here/here
$ pwd -P
/tmp
Использование Python также работает:
python -c "import os; print(os.path.realpath('.'))"