grepにはBash-Globbingに類似した検索パターンがあります。

grepにはBash-Globbingに類似した検索パターンがあります。

grep同様のコマンドと一致させるために非常に単純なパターンを使用したいと思います。背景はVM名リストのgrepです。たとえば、VM名のみを一覧表示するコマンドは、名前が「.local」で終わるVMを探しています。

正しいこと:

# virsh list --name | grep '\.local$'

次のようなものを使いたい

# virsh list --name | mygrep *.local

文字クラスや範囲式は必要ありませんが、シェルワイルドカードのデフォルトパターンを適用する必要があります。

  • *0個以上の文字
  • ?1つの役割のみ
  • パターンの始まりと終わりを暗示する文字列の始まりまたは終わりを示す追加のマーカーはありません。
  • ポイントは特別な意味がありません。.

(単純化のために、bashのファイル名ワイルドカードを最初に無視してください)

ベストアンサー1

カーニバルとして機能

mygrep() {
    local pattern=$1 line
    while IFS= read -r line; do
        if [[ $line == $pattern ]]; then
            printf '%s\n' "$line"
        fi
    done
}

==オペレーターが[[...]]いる場所パターンマッチングオペレーター。
引用:https://www.gnu.org/software/bash/manual/bash.html#index-_005b_005b

しかし、@Pankiが言ったように、スキーマを参照する必要があります。


そして一部は娯楽用です

  • function mygrep
      while read --line line
        string match -- $argv[1] $line
      end
    end
    
  • #!/usr/bin/env tclsh
    proc glob_grep {argv} {
        lassign $argv pattern
        while {[gets stdin line] != -1} {
            if {[string match $pattern $line]} {
                puts $line
            }
        }
    }
    glob_grep $argv
    

おすすめ記事