2017-11-12 1 views
-1

は、私は、ディレクトリ・パスパスに一致する正規表現。最終ディレクトリは除きます。 Perlのエラー「検索パターンが-eで終了していない」

/abc/de/fgh/i/jk 

を持っていると私はちょうど私がこれを行うだろうか

/abc/de/fgh/i/ 

に一致するようにしたいと言いますか? https://regexr.com/

(\/.*\/)* 

、トリックを行うようだ:私が試してみました。しかし

、私は試してみてください。

path="/abc/de/fgh/i/jk" 
sliced=`echo $path | perl -pe '(\/.*\/)*'` 

私はエラーを取得する:

Search pattern not terminated at -e line 1 

は、Perl以外にこれを行うには良い方法はありますか?とにかくperlエラーを与えるためにここに間違っていますか?私の正規表現はここでも正しいですか?

echo $path | sed 's,[^/]*$,,' 

は出力/abc/de/fgh/i/

正規表現は、最後にすべての非スラッシュ文字に一致します。

答えて

4

は、dirnameこれを行うにはcoreutilあり:

path="/abc/de/fgh/i/jk" 
sliced=`dirname "$path"` 

はしかし、それはまた、末尾の/を削除します。何らかの理由であなたは、それを必要とする場合は、単にslicedに追加します:

sliced=`dirname "$path"`/ 

$pathを引用してください。そうでない場合は、スペースを含むパスでは機能しません。

あなたのPerlプログラムは、正規表現の演算子を置かないために動作しません。最初の文字は\で、文字列や正規表現には含まれていないので無視され、/という正規表現が始まります。終了するにはエスケープされていない/が存在しないため、エラーが発生します。 s/(\/.*\/)*.*/$1/のようなものがほしいでしょう。最後の/の後にすべてを消去する必要があります。

1

使用sed、しかし、あなたが(むしろあなたが残しておきたいものよりも)を削除にしたいものと一致それらを取り除き、それらを取り除く。

1

なぜパラメータ拡張を使用しないのですか?

echo "${path%/*}/" 
関連する問題