Разделите базовое имя файла, сохраните часть каталога

У меня есть строка, которая выглядит примерно так:

dir/subdir/othersubdir/file.txt 

Но это также может выглядеть

 dir/file.txt 

или

 dir/subdir/file.txt 

Теперь, я делаю скрипт, где $P полный путь к каталогу были file.txt .

Теперь я использую это

 sed 's/\/.*txt//g' 

Чтобы заменить все, что заканчивается на txt, и появляется после / . Это отлично работает, когда есть что-то вроде dir/file.txt , но не какие-либо другие мои примеры. Как я могу исправить, чтобы он соответствовал тому, что я хочу?

Я не хочу сопоставлять какие-либо подкаталоги раньше .*txt . Я хочу удалить только имя базы данных.

3 Solutions collect form web for “Разделите базовое имя файла, сохраните часть каталога”

Если вы не настаиваете на использовании sed вы можете использовать dirname :

 S="dir/subdir/othersubdir/file.txt" P=$(dirname $S) echo $P dir/subdir/othersubdir S="dir/file.txt" P=$(dirname $S) echo $P dir 

Вот команда sed :

 $ P="dir/subdir/othersubdir/file.txt" $ sed -r 's/^(.*)\/.*\.txt$/\1/' <<< $P dir/subdir/othersubdir 

В приведенной выше команде sed мы /*.txt что угодно .* /*.txt с начала переменной переменной P которая заканчивается $ с /*.txt , которую она называется захваченной группой с \1 качестве ссылки beck-ссылки, потому что она использует пару круглых скобок вокруг нее (.*) , то в заменяющей части команды sed мы печатаем только захваченную группу, используя ее обратную ссылку.

Если вы используете zsh жизнь намного проще, просто используйте :h модификатор:

 $ var='dir/subdir/othersubdir/file.txt' $ echo "$var:h" dir/subdir/othersubdir 
  • распечатать определенную строку из нескольких файлов
  • Чтение заданных строк в файле - BASH
  • Почему не матч SHA?
  • Использование sed для консолидации разностного вывода
  • Сопоставьте начало линии с чем-то там?
  • сценарий оболочки для извлечения символов
  • Извлечение нескольких экземпляров текста между двумя словами, включая стартовое слово, но исключающее слово
  • Шаблон Regex для замены нескольких значений с помощью sed
  • Создание файлов из шаблонов, замещение в середине других слов
  • Использование CSV-строки в качестве параметров команды
  • sed соответствует только во второй строке
  • Interesting Posts

    Показывать значки (или цвета), даже если переключатель рабочего пространства невелик?

    Нужно ли увеличить размер исходного раздела, если я просто восстанавливаю содержимое (с помощью dd)?

    Какая лучшая книга должна читать каждый пользователь Unix или Linux?

    Поведение stdin / stdout в сочетании с подоболочками и командой cd

    запрашивать все символические ссылки в каталоге

    Как распаковать источник libc6 на Hardy, используя debian / rules?

    Могу ли я преобразовывать поля в XML в теги с помощью xmlstarlet?

    Почему я не могу применить этот скрипт к файлам не в моем текущем каталоге?

    выводить файл журнала с некоторого времени до некоторого времени через ssh

    контролировать процесс, сопоставляя полный cmdline

    Ноутбук не отключается после того, как он был приостановлен

    Чтобы удалить новые строки после пустой строки

    Тар, используя индикатор выполнения и обработку многотонов

    Многомесячный просмотр в календаре (cal) в OS X

    Создание мультисессионного ISO-образа для записи на удаленном компакт-диске

    Linux и Unix - лучшая ОС в мире.