#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
, затем "'.*'"
добавляется '.*'
к строке кода, а затем '
перезапускается строка кода, которая должна быть закрыта с '
завершением .