Вопрос или проблема
Как мне удалить первое ./
и завершающий /
из моего пути?
-
Сейчас мой код выглядит так:
sed -i 's/dir2\/file-example.json//' test.sh
и результат выводится так:
./dir1/
-
Но я хотел бы, чтобы он выглядел так:
dir1
чтобы удалить
./
и/
с начала и конца, оставив только имя директории.
Это возможно?
Вам не обязательно использовать /
в качестве разделителя регулярного выражения, но вы можете использовать “любой другой одиночный символ” – экранируя его. info -n 'Команда "s"' sed
:
Команда
s
(как в замените) вероятно самая важная в
sed
и имеет много разных опций. Синтаксис команды ‘s’
этоs/REGEXP/REPLACEMENT/FLAGS
.
[…]
Символы/
могут быть однородно заменены любым другим одиночным
символом в любой данной командеs
. Символ/
(или любой другой символ, используемый вместо него) может появляться в REGEXP или REPLACEMENT только в том случае, если он предшествован символом\
.
Таким образом, вы можете использовать s%pattern%replacement%
вместо s/pattern/replacement/
здесь, чтобы избежать необходимости экранировать /
в шаблоне как \/
:
sed -i 's%\./%%; s%/dir2/file-example.json%%;' test.sh
Обратите внимание, что точка также должна быть экранирована, чтобы отключить её специальное значение в регулярных выражениях.
Используя “обратные ссылки”, это может стать еще проще:
sed -i 's%\./\(dir1\)/dir2/file-example.json%\1%;' test.sh
где \1
ссылается на первое обрамленное частичное регулярное выражение (в данном случае: dir1
).
Ответ или решение
Для решения задачи по удалению начальной части ./
и конечного символа /
из строки с путем с использованием утилиты sed
, существует несколько эффективных подходов. Ваша цель заключается в преобразовании пути, чтобы на выходе осталась лишь имя директории без лишних символов.
Шаги по решению задачи
-
Установка условия: Убедитесь, что вы работаете с правильной строкой, содержащей ваш путь, например,
./dir1/
. -
Использование
sed
для замены: Для удаления символов вsed
вы можете воспользоваться следующим синтаксисом:sed -i 's%^\./%%; s%/$%%;' test.sh
Здесь мы используем два выражения:
s%^\./%%
удаляет префикс./
, где^
указывает на начало строки.s%/$%%
удаляет символ/
в конце строки.
-
Использование обратных ссылок: Если структура строки более сложная, например, вы хотите также сохранять некоторые части пути, можно использовать обратные ссылки. Вот пример:
sed -i 's%^\./\(.*\)/$%\1%' test.sh
В этом выражении
\(.*\)
захватывает все символы между./
и/
, а\1
возвращает захваченную часть без лишних символов.
Пример использования
Предположим, у вас есть файл test.sh
, содержащий следующую строку:
./dir1/
После запуска команды sed
с одним из предложенных выше вариантов, файл test.sh
будет содержать:
dir1
Обобщение и рекомендации
- Используйте символы, отличные от
/
, например,%
, чтобы избежать необходимости экранировать символы в регулярных выражениях. - Убедитесь, что вы указали верный путь к формату файла с нужной структурой. В случаях, где структура строк может различаться, разрабатывайте выражения с учетом различных возможных вариантов.
- Тестируйте ваши команды на небольших примерах перед их применением к реальным данным, чтобы гарантировать их корректность.
Эти подходы и техники не только решат вашу задачу, но и расширят ваши знания в области работы с sed
, что полезно для общего опыта в обработке файлов и скриптов в Linux/Unix средах.