Как получить 6 цифр из середины пути к файлу

Вы установили программу , а не зависимость . Имя пакета _RPM указывает зависимость от sqlite RPM , а не от sqlite программы .

Либо установите sqlite RPM (после удаления вручную -установленного ), либо скажите RPM игнорировать зависимости при установке имени пакета _:rpm -i --nodeps package_name.rpm.

0
24.06.2021, 14:06
2 ответа

Предполагая, что это настоящие файлы в вашей системе, вы можете легко извлечь часть перед первым _в именах файлов каждого файла, соответствующего *_*.tar.tgzв каталоге /dbfs/mnt/dlg2stage/foldername/backupname, используя цикл оболочки:

for pathname in /dbfs/mnt/dlg2stage/foldername/backupname/*_*.tar.tgz; do
    name=$( basename "$pathname" )
    printf '%s\n' "${name%%_*}"
done

Утилита basenameдаст вам часть пути к имени файла. Учитывая пример, который вы показываете, это назначит строку 201906_load_1_20210623-151602.tar.tgzпеременной name. Вы также могли бы использовать name=${pathname##*/}, чтобы сделать то же самое (это расширение параметра удаляет начальный раздел строки в $pathname, вплоть до последнего/)включительно.

Расширение параметра ${name%%_*}приведет к удалению из значения $nameсамой длинной конечной подстроки, соответствующей _*. В показанном примере это удалит первый символ _и все, что находится справа от него, оставив подстроку 201906, которая затем будет напечатана с использованием printf.

2
28.07.2021, 11:22

Я думаю, вы просто хотите напечатать 201906по этой строке пути. В этом примере эти шесть цифр — это:первые шесть цифр, перед которыми стоит косая черта .

Я помещаю путь в переменную, чтобы упростить чтение команды:

% path_str='/dbfs/mnt/dlg2stage/foldername/backupname/201906_load_1_20210623-151602.tar.tgz'

% echo $path_str | sed 's/.*\/\([0-9]\{6\}\).*/\1/'
201906

Вот как я построил это совпадение и замену в sed:

  • \/[0-9]\{6\}:соответствует косой черте и 6 цифрам
  • \/\([0-9]\{6\}\):то же самое, но теперь в группе захвата или подвыражении (косая черта отсутствует в группе захвата)
  • .*\/\([0-9]\{6\}\).*:соответствует всему, что было до и после, так что... вся строка
  • \1:с совпадением всей строки, используйте ссылку для первой(и единственной группы захвата ), чтобы заменить всю строку только первыми 6 цифрами
0
28.07.2021, 11:22

Теги

Похожие вопросы