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

Я даже не уверен, будет ли 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 с использованием содержимого heredoc
  • Количество вкладок в строке в текстовом файле с utils
  • Найдите строку в файле и переименуйте несколько файлов в результаты
  • Синтаксис синтаксиса «grep» для BRE или ERE содержит синтаксис «синтаксиса регулярных выражений» 8.5.6 'в справочнике findutils?
  • sort: write failed | Сломанная труба
  • grep -v: как исключить только первые (или последние) N строк, которые соответствуют
  • Как искать несколько шаблонов в grep, игнорируя первый шаблон, если он появляется последовательно
  • Как объединить grep с файлом и дополнительным регулярным выражением
  • GREP / SED или AWK: печать всего абзаца в файле по совпадению с образцом
  • Как распечатать только первый матч с помощью grep
  • Когда использовать grep, less, awk, sed
  • Linux и Unix - лучшая ОС в мире.