Я использую PWD для получения текущего рабочего каталога. Есть ли SED или регулярное выражение, которое я могу использовать, скажем, чтобы получить полный путь к двум родителям?
Bash script regex, чтобы получить путь к каталогу до n-го уровня
Ответ 1
Почему sed или регулярное выражение? Почему бы не dirname
:
parent=`dirname $PWD`
grandparent=`dirname $parent`
Edit:
@Даний указывает в комментариях, что, по-видимому, $()
является предпочтительным по сравнению с backquotes ``
для замены команд в POSIX-совместимых оболочках. У меня нет опыта с ними. Дополнительная информация:
http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03
Итак, если это относится к вашей оболочке, вы можете (должны?) использовать:
parent=$(dirname $PWD)
grandparent=$(dirname $parent)
Ответ 2
Это должно работать в оболочках POSIX:
echo ${PWD%/*/*}
который даст вам абсолютный путь, а не относительный.
Ответ 3
почему бы не использовать
"${PWD}/../.."
?
Ответ 4
Не sed или регулярное выражение, но это делает произвольное родительское количество:
$ cd $(mktemp -dp $(mktemp -dp $(mktemp -dp $(mktemp -d)))) && \
> n=3 && \
> readlink -f ${PWD}/$(for i in $(seq ${n}); do echo -n '../' ; done)
/tmp/tmp.epGcUeLV9q
В этом примере я cd
в 5-кратный временный каталог, назначьте n=3
, постройте относительный путь n
с ${PWD}
, а -f, --canonicalize
результат с readlink
.