Как я могу удалить начало и конец пути с помощью sed?

Вопрос или проблема

Как я могу убрать первый ./ и завершающий / из моего пути?

  • Мне нужно изменить следующий путь:

    ./dir1/dir2/file-example.json
    
  • Сейчас в моем коде есть:

    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).

Используя Perl

~$ perl -pe 's!^\./||/dir2/file-example.json$!!g;' oldtest.sh > newtest.sh

Используя Raku (ранее известен как Perl_6)

~$ raku -pe 's:g!^ "./" | "/dir2/file-example.json" $ !!;'  oldtest.sh > newtest.sh

#ИЛИ:

~$ raku -pe 's:g[^ "./" | "/dir2/file-example.json" $] = "";'  oldtest.sh > newtest.sh

Ссылки по Perl:
https://perldoc.perl.org
https://www.perl.org

Ссылки по Raku:
https://docs.raku.org
https://raku.org

.

Ответ или решение

Чтобы удалить начальную часть ./ и конечный / из заданного пути с помощью утилиты sed, вы можете воспользоваться несколькими методами. Здесь я предоставлю подробные объяснения различных подходов, а также краткие примеры для выполнения вашей задачи.

Использование sed для редактирования пути

  1. Сначала, определим, что нам нужно удалить:

    • Начало строки: ./
    • Конец строки: /
  2. Стандартное выражение sed:
    Мы можем использовать команду замены s в sed, чтобы убрать оба элемента. Важным моментом является то, что мы можем выбрать любой символ в качестве разделителя, чтобы избежать экранирования символа /. Например:

    sed 's|^\./||; s|/$||' ваш_файл

    Это выражение означает:

    • s|^\./|| — убирает ./ в начале строки.
    • s|/$|| — убирает символ / в конце строки.

    Здесь ^ обозначает начало строки, а $ — конец строки.

  3. Упрощенное выражение с обратными ссылками:
    Если в вашем файле пути всегда одинаковые, как указано в вашей задаче, можно использовать обратные ссылки для более простого управления:

    sed -E 's|^\./([^/]+)/.*|\1|' ваш_файл

    Здесь:

    • -E включает расширенные регулярные выражения, что позволяет использовать более сложные шаблоны.
    • ([^/]+) захватывает любую последовательность символов, которая не содержит / (это будет вашей нужной папкой).
    • \1 возвращает захваченную группу.
  4. Запись в файл:
    Если вы хотите сразу записать результат в оригинальный файл, добавьте опцию -i:

    sed -i 's|^\./||; s|/$||' ваш_файл

Использование Perl

Поскольку вы указали sed, однако упомянули и Perl, вот как можно сделать то же самое с помощью Perl:

perl -pe 's{^\./}{}; s{/$}{};' ваш_файл

Проверка результата

После выполнения одной из вышеуказанных команд результат будет таким:

dir1

Заключение

Команды выше дают возможность легко обработать и изменить пути в вашем файле, удаляя ненужные символы. Использование sed — удобный и эффективный способ выполнения такой задачи в Unix-подобных системах. Не забывайте всегда делать резервные копии важных файлов перед их изменением.

Оцените материал
Добавить комментарий

Капча загружается...