регулярное выражение для получения пути и имени файла из строки в Linux - PullRequest
2 голосов
/ 30 января 2012

В bash я хотел бы получить имя файла из строки командной строки.Но не текущий ($ 0) скрипт!

У меня есть файл, полный скриптов с параметрами.Мне нужны только сценарии из него!

Например, у меня есть строка вроде: / path / to / file parameter1 -p2

, я хотел бы получить: / path / to/ file (без параметров) даже в случаях:

/an\ example/with.dot.in_it/.hidden_file.sh par\ ameter1 p.dot.2
./script.sh p1 p2
../script.sh p1 p2
/any////relative/../path/./to/script.sh p1 p2

Таким образом, в любом допустимом пути linux и именах файлов!

Существует ли регулярное выражение для этой цели или есть какой-либо другой способчтобы получить это?

Заранее спасибо!

Ответы [ 5 ]

1 голос
/ 30 января 2012

Вы можете использовать функцию регулярного выражения в командной строке perl в сочетании с командой readlink для всегда получения полного пути к вашему сценарию. Давайте данные ваши имя файла со всеми командами и их параметрами. Вы можете использовать скрипт таким образом, чтобы получить полный путь ваших скриптов:

while read -r F
do
    SCRIPT=$(perl -pe 's/^(.*?)(?<!\\) .*$/\1/;s/\\//g' <<< $F)
    readlink -f "$SCRIPT"
done < data
0 голосов
/ 31 января 2012
basename "$string"

Или

${string##*/}
0 голосов
/ 31 января 2012

, если вы действительно хотите использовать регулярные выражения (многие лучшие решения были описаны выше), тогда это может вам помочь:

/^(.+[^\\]) /

это соответствует всем символам до первого пробела, который не следует за\

вы получите путь от захваченной группы

0 голосов
/ 30 января 2012

Вы можете использовать команду dirname .

0 голосов
/ 30 января 2012

Чтобы получить имя оболочки или сценария оболочки изнутри .hidden_file.sh, вы можете использовать $0:

echo "$0"
...