Удалите определенное (известное) расширение из имени файла, если оно есть

Я даже не уверен, будет ли grep использоваться для регулярного выражения в однострочных данных. Googling привел меня к этому внешнему выражению, которое вместе с grep соответствует любому .ext файлу и возвращает пустое имя:

 XX@XX:/$ echo name.ext | grep -oP [^\.]+(?=.ext) name 

Это хорошо, но теперь я предлагаю пользователю сохранить файл, и я не уверен, будет ли он вводить имя с расширением или нет. Я попытался сделать условное выражение условным, гарантируя соответствие всех имен, но это возвращает то, что я не понимаю:

 XX@XX:/$ echo name.ext | grep -oP "[^\.]+(?=.ext)?" name ext 

Он работает, если я опускаю расширение:

 XX@XX:/$ echo name | grep -oP "[^\.]+(?=.ext)?" name 

Так это проблема grep или проблема с регулярным выражением? Может быть, мне нужно каким-то образом сделать просмотр не захватывающим?

2 Solutions collect form web for “Удалите определенное (известное) расширение из имени файла, если оно есть”

Вы можете использовать замену оболочки POSIX, чтобы удалить .ext :

 file='name.ext' printf '%s\n' "${file%.ext}" 

Чтобы присвоить произвольную строку расширения новой переменной, сделайте

 noext="${file%.ext}" 

Используя ваш подход (есть лучшие решения):

 echo name | grep -oP '^[^.]+(?=(\.ext)?$)' 
  • grep для IP без последнего октета как 0
  • Трубопровод из находки в grep
  • Искать текст в Linux, но не отображать полную строку в результатах
  • Zgrep останавливается после первого совпадения, когда аргументы передаются из xargs
  • На сервере HP-UX опция grep -r не работает
  • Поиск строки в файлах в текущем каталоге, опустить дубликаты
  • Переупорядочить текстовый файл путем добавления строк данных со строкой заголовка
  • Выделение целых чисел, заключенных в круглые скобки
  • Время / Дата grep в течение 15 минут
  • Строка Grep, затем удалите слово и выполните следующую инструкцию
  • Могу ли я использовать совпадения grep для выполнения команды?
  • Чтение и добавление в файл одновременно с сохранением конца строки
  • Interesting Posts

    недокументированное изменение поведения «локального», встроенного в bash 4.3?

    MD soft-raid для замены поддельного рейда: как избавиться от старых метаданных?

    Как правильно настроить 2 сетевых интерфейса в CentOS (работает в VirtualBox)?

    Невозможно убедить Thunderbird открывать ссылки во всем, кроме Firefox, на ArchLinux

    Как мне перейти на новый Firefox через YaST в OpenSuSE 11.x?

    Компиляция пакета для проблем с debian 8

    неспособный полностью установить элементарные os Luna на imac 11.1 (конец 2009 года)

    Нежелательный текст консоли

    Как я могу отправить электронную почту без использования uuencode и отключения звука?

    Как свести к минимуму использование сглаженных шрифтов во всех средах и приложениях для рабочего стола?

    Перестроить каталог pki и связанные с ним изменения

    Можно ли вывести две конкретные вещи вывода?

    Выведите отрицательные значения, независимо от оригинала, на выбранных линиях

    SSH Remote Port Forward Host Без пароля

    HISTTIMEFORMAT не показывает правильную дату и время для истории

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