0

awkコマンドを使用してディレクトリのみを印刷したい。現在のディレクトリと親ディレクトリを出力したくないので、適切な正規表現の一致を作成しました。

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.$/ && $9 !~ /^\.\.$/   { print $1"\t"$9 } '

コードは正しく動作しますが、次のように読みやすくしたかったのです。

ls -la | awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/    { print $1"\t"$9 } '

残念ながら、2 番目の一致は機能しません。

1 つまたは 2 つのドットに一致するように定義するにはどうすればよいですか?

4

5 に答える 5

0

Solaris で awk コマンドを実行しましたか。awk を次のように置き換えてください。/usr/xpg4/bin/awk

ls -la | /usr/xpg4/bin/awk '$1 ~ /[d].*/ && $9 !~ /^\.{1,2}$/ {print $1"\t"$9}'
于 2014-02-10T03:52:12.190 に答える
0

古い awk (非 gnu) awk バージョンは次のような正規表現パターンをサポートしていないため、2 番目の例は機能しません。

/\.{1,2}/

ただし、ディレクトリ リストを取得するためだけに、ls の出力を解析しないでください。

編集:隠しディレクトリを印刷するが、これを避け...使用するには:

以下を使用できます。

printf "%s\n" */ .*[!.]*/

改行を含むファイル/ディレクトリ名には問題があることに注意してください。

于 2014-02-10T04:12:30.950 に答える