Удалить фиксированное расширение имени файла в однострочном

#regex #ruby

#регулярное выражение #ruby

Вопрос:

Когда я делаю

 ruby -e 'print "file: #{ARGF.filename}"' test1.adoc
  

он печатает test1.adoc , но то, что я ищу, — это удалить расширение, поэтому я просто получаю test1 . Если сделать

 $ touch test1.adoc
$ ruby -e 'print "file: #{ARGF.filename}.sub('.adoc','')"' test1.adoc
Traceback (most recent call last):
    1: from -e:1:in `<main>'
-e:1:in `filename': No such file or directory @ rb_sysopen - test1.adoc (Errno::ENOENT)
  

Использование требует времени для получения общего решения, но это усложняет движение по этому пути. pop ..

Вопрос

Кто-нибудь может понять, как удалить .adoc в моем однострочнике?

Комментарии:

1. Что, если это /foo/bar/test.adoc ? Чего бы вы хотели?

Ответ №1:

Используется File.basename для удаления расширения и остальной части пути к файлу.

 puts File.basename('test1.adoc', '.*')  # test1
puts File.basename('/foo/bar/test1.adoc', '.*')  # test1
  

Ответ №2:

Вы можете использовать

 ruby -e 'print "file: #{File.basename(ARGF.filename, '"'.*'"')}"' test.adoc
  

Значение File.basename со вторым аргументом, равным .* возвращает имя файла без каких-либо расширений, но вам нужно правильно заключить одинарные кавычки, чтобы сохранить правильный синтаксис.

В '"'.*'"' первом ' случае закрывается текущее открытое ' ранее print , затем "'.*'" добавляется '.*' к строке кода, а затем ' перезапускается строка кода, которая должна быть закрыта с ' завершением .