最初のフィールドに特殊文字のみを含む行を削除する方法は?

最初のフィールドに特殊文字のみを含む行を削除する方法は?

最初の区切りフィールドにのみ/or'または-orを含む行を削除する方法は?.|

  • 試したコード:
    sed 's/^\.\d; /^\-/d; /^\//d' file > file_out
    
  • 入力例:
    /|98374|
    /trust|q83129|
    //|392720|
    //cust|23892|
    .|9374|
    .abcd|28374|
    '|238674|
    'hcsu|3810|
    -|327492|
    -abcde|9837|
    
  • 予想出力:
    .abcd|28374|
    /trust|q83129|
    //cust|23892|
    'hcsu|3810|
    -abcde|9837|
    

ベストアンサー1

"Force"ベースのawkソリューション :)

awk -F'|' '$1 !~ /^[\/'\''.-]+$/' input.txt

これにより、フィールド区切り文字がに設定され、|条件が満たされた場合にのみ印刷されます。「最初のフィールド()は正規表現()$1と一致しません。!~/'.-^[/'.-]+$実現しました。

awkプログラムを一重引用符()で囲む必要があるため、これを表す構文は少し複雑です。' ... 'それ以外の場合、シェルはその文$1に到達する前と同様に文を解釈しますawk。したがって、文字リストは、'一重引用符の「中断」(最初のもの)、エスケープされたリテラル一重引用符(\')、一重引用符プログラムの連続で構成されますawk

または、読みやすくすることもできます。引用符付き文字列、引用符付き文字列、および他の引用符付き文字列を連結してプログラムを作成しますawk'...'"..."'...'

awk -F'|' '$1 !~ /^'"[\/'.-]"'+$/' input.txt

おすすめ記事