Unixシェルスクリプトのファイルから特定の文字列パターンを見つける

Unixシェルスクリプトのファイルから特定の文字列パターンを見つける

次のコマンドがあります。

 unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | grep  ":taxonomies-" | head -1

これは私に出力を与えます。

    <j.2:Taxo_Version rdf:resource="refmat:taxonomies-8.2.0"/>

しかし、抽出するだけです。分類-8.2.0上記の完全な文字列の代わりに。

ベストアンサー1

-o1つの方法は、grepのオプションを次のように組み合わせて使用​​することです。PCRE( -P):

   -o, --only-matching
          Print  only  the  matched  (non-empty) parts of a matching line,
          with each such part on a separate output line.
   -P, --perl-regexp
          Interpret  PATTERN  as  a  Perl  regular  expression  (PCRE, see
          below).  This is highly experimental and grep  -P  may  warn  of
          unimplemented features.

だから、あなたはこれを行うことができます

 unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | grep -oP ':\Ktaxonomies-[^"]*' | head -1

\Kその点まで一致するすべての項目が無視され(したがって:印刷されない)、「[^"]*"文字以外の文字をできるだけ一致させる」ことを意味します。"

その他のオプションは次のとおりです。

  1. sed

    unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | 
        sed -n 's/.*:\(taxonomies-[^"]*\).*/\1/p' | head -1
    

    明示的に指示しない限り、何も印刷されず、-n代替演算子です。行のすべての内容を括弧()の間の部分で置き換えます。これにより結果行が印刷されます。seds///\1p

  2. パール

    unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | 
      perl -lne 's/.*:(taxonomies-[^"]).*/$1/ && print' | head -1
    

    のような基本的なアイデアですsed。交換が成功したら、ラインを印刷します。別のオプションは

    unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | 
      perl -lne '/.*:(taxonomies-[^"])/ && print $1' | head -1
    

おすすめ記事