2012-01-30 8 views
2

bashでは、コマンドライン文字列からファイル名を取得したいと考えています。しかし、現在の($ 0)スクリプトではありません!Linuxの文字列からパスとファイル名を取得するための正規表現

私は、パラメータを持つスクリプトでいっぱいのファイルを持っています。私はそれからスクリプトだけが必要です!でも、場合によっては(パラメータなし)/パス/に/ファイル :をたとえば

私のような文字列を持っている:私は取得したいと思い /パス/に/ファイルのパラメーター1 -p2

/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のパスとファイル名のケースでは、

この目的のための正規表現がありますか、またはこれを得る他の方法はありますか?

ありがとうございます!

+0

"cut"コマンドを使用して最初のフィールドを次のように簡単に取得できます。echo "$ str" | cut -d "" -f1 –

+0

いいえ、空白がある場合は対処しません。 '$ cut -d '' '-f -2'を使います。 –

答えて

1

あなたはにREADLINKコマンドと組み合わせるperlのコマンドラインの正規表現の機能を使用することができ、常にはあなたに完全なパスを取得しますスクリプト。 Let's dataは、すべてのコマンドとそのパラメータを含むファイル名です。あなたは、あなたのスクリプトのフルパスを取得するには、このようなスクリプトを使用することができます:

while read -r F 
do 
    SCRIPT=$(perl -pe 's/^(.*?)(?<!\\) .*$/\1/;s/\\//g' <<< $F) 
    readlink -f "$SCRIPT" 
done < data 
+0

ありがとうございますが、私はここで$ 0を使用することはできません!そして、スクリプトはこのコンピュータ上に存在しないかもしれません! – csampi

+0

これは例です。 'echo $(readlink -f ../ script.sh)' – anubhava

+0

'readlink -f" /asd/qwe/../zxc/./script.sh par1 par2 "' のような結果をいつでも得ることができます何もありませんが、 '/ asd/qwe /../ zxc /./script.sh'を返さなければなりません – csampi

0

あなたが$0を使用することができ.hidden_file.sh内部からシェルまたはシェルスクリプトの名前を取得するには:

echo "$0" 
0

あなたはdirnameコマンドを使用することができます。

+0

これはファイル名なしのディレクトリ名だけを表示しますが、パスはかなり良いです! – csampi

0

あなたは本当に、これはあなたを助けるかもしれない(多くの、より良い解決策は、上記discribedた)正規表現を使用する場合:

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

を、これは従っていない最初のスペース、までのすべての文字にマッチ\

あなたが捕獲グループ

0
basename "$string" 

それとも

からパスを取得210
${string##*/} 
関連する問題