Linux bash awkは特殊文字で単語を印刷します。

Linux bash awkは特殊文字で単語を印刷します。

URLがあります:

www.google.com/word/word1/word_2/word3/word4

_awkを使用して特殊文字を含む単語のみを印刷したいと思います。場合によっては、フォルダ階層が変更されることがあります。

www.google.com/word/word1/word2/word3/word_4

私はこれを使用していますが、時々フォルダが上にあることがあります$6

folder=$(echo "$url" | awk -F/ '{print $6}')

/文字の間にフォルダ名を印刷する必要があります。

ベストアンサー1

これはうまくいきます。おそらくより効率的な方法があります。

echo 'www.google.com/word/word1/word2/word3/word_4' | awk -F'/' '{for(i=2;i<=NF;i++){if($i~/_/){print $i}}}'
word_4

すべてのフィールドを繰り返し、単語にアンダースコアが含まれていることを確認すると、その単語が印刷されます。 2以降、ドメイン名は変更されていないと仮定します。

非反復的なアプローチのアイデア:

$ echo 'www.google.com/word/word1/word_2/word3/word4' | awk '{print gensub(/^.*\/([^/]+_[^/]*).*/,"\\1","1")}'
word_2

awkが必要ない場合、よりエレガントな解決策は次のとおりです。

$ echo 'www.google.com/word/word1/word_2/word3/word4' | grep -oE '[^/]+_[^/]*'
word_2

おすすめ記事