как вырезать первые 3 папки из этого эха «/home/test/var/opt»? мне нужен результат «/home/test/var»

No sé por qué, pero cuando ejecuto este comando:

firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload

Funciona.

2
15.06.2019, 04:10
4 ответа

Используйтеcut -d "/" -f1-4

ebvjr@Maintenance:~$ echo /home/test/var/opt | cut -d "/" -f1-4
/home/test/var
1
27.01.2020, 22:17

Обычно пути изменяются с помощью двух утилит basenameи dirnameили с помощью подстановки параметров, а не с помощью утилит редактирования текста на основе строки -.

Это связано с тем, что технически пути могут содержать символы новой строки, что затруднит работу с надежными инструментами на основе строки -, такими как cut(, sedили awkи т. д.)

Например, у вас есть путь к родительскому каталогу /home/test/var/opt. Лучше всего это сделать с помощью

dirname /home/test/var/opt

Это вернет /home/test/var. Это будет работать, даже если указанный путь имеет /в конце.

0
27.01.2020, 22:17

Я сделал по методу ниже awk

команда

echo "/home/test/var/opt"| awk -F "/" 'OFS="/"{print $1,$2,$3,$4}'

выход

/home/test/var
0
27.01.2020, 22:17

cut нормально, как говорит @ebvjr, просто помните, что вам нужно 4 поля, потому что первое пустое.

Если вы grep, то код длиннее, но, возможно, более интуитивно понятен({3}= 3-я подпапка -).

grep -Po "(/[^/]+){3}" <<<"/home/test/var/opt"
/home/test/var
0
27.01.2020, 22:17

Теги

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