lsがディレクトリ以外の項目を表示するようにawkを使用してみてください。

lsがディレクトリ以外の項目を表示するようにawkを使用してみてください。

ディレクトリ以外のすべてのファイルの一覧を表示しようとしています。ls -la | awk '$1 != "d*"'最初の列に始まる文字列が表示されないことを願って入力しましたが、期待dどおりに機能しませんでした。私の間違いはどこにありますか?

ベストアンサー1

!=文字列比較 (または比較対象に応じた数値比較) 演算子です。文字列比較(A != B)の場合、実装によってはawkバイト間比較である可能性があり、一部(POSIXで必要な場合)の場合、合計が異なるようにソートされるかどうかをテストするA < B || A > B略語です。A != BAB

ある意味、パターンマッチング演算子ではありません。これには~演算子(否定を含む!~)がありますが、これはワイルドカードパターンマッチングではなく正規表現マッチングのためのものです。以下を行う必要があります。

ls -la | awk '$1 !~ /^d/'

ここでは、以下を使用することもできます。

ls -la | grep -v '^d'

持っていれば$1 != "d*"また戻ってくる本物最初のフィールド(または一部の実装と同じソートawk)を除くすべての項目についてd*d*正規表現はすべての数字(0を含む)と一致するため、常に0以上の文字列として返されますd$1 !~ "d*"falsed

おすすめ記事