特定の構造のフォルダ名をキャプチャする正規表現

特定の構造のフォルダ名をキャプチャする正規表現

この構造を使用してフォルダ名を取得する正規表現は何ですか?

xxxx-x(x - 整数)

 ls /usr/hdp | .....
 2.6.0.3-8  current HG_MASTER 2.4.3 34.1 45-995

期待される出力

2.6.0.3-8



ls -lh /usr/hdp/
total 8.0K
drwxr-xr-x. 27 root root 4.0K Jan  1 15:24 2.6.0.3-8

答え1

タグ付けした後、拡張globを使用して、シェルのファイル名を一致させることで実際にこれを行うことができます。

$ shopt -s extglob
$ touch /some/path/{2.6.0.3-8,22.66.0.333-8,foobar}
$ printf "%s\n" /some/path/+([0-9]).+([0-9]).+([0-9]).+([0-9])-+([0-9])
/some/path/22.66.0.333-8
/some/path/2.6.0.3-8

パターンは*またはなどのより一般的なパターンのように機能する*.pngため、固定部分(パスなど)を貼り付けることができます。/ディレクトリのみを一致させるには、後ろにスラッシュを追加してください。 (ただし、出力にはスラッシュも表示されます。)

ERE正規表現では、パターンは[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-[0-9]+。難読化されたバージョンは+([-.0-9])(またはEREで)のような許可された文字だけをチェックします[-.0-9]+が、もちろん例えば123..456

ファイル名のみを印刷したい場合はfind簡単ですが、ファイル名に対してコマンドを実行したい場合は、シェルループもオプションです(と共にfind -exec)。

答え2

find . -type d -regextype posix-egrep -regex '^./([0-9]+[.]){3}[0-9]+[-][0-9]+'

find を使用して regextype フラグを使用して reg 式の構文を egrep に設定します。 -regexを使用して、3桁の数字と「ドット」、数字、「ダッシュ」、および数字を確認してください。

数字が2文字以上の場合は、各数字の後に+を追加する必要があります。

答え3

代わりにそれを使用する必要がありますfind。正確に一致する使用パターンの場合:

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*-[0-9]*"

以下を含むファイルが必要な場合数字、名前の記号は次の.とおりです。-

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[.0-9-]*"

答え4

ls /usr/hdp | egrep '[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+'

関連情報