0

GNU bash、バージョン 4.2.20(1)-release (x86_64-pc-linux-gnu) を使用しています。変数にダンプした音楽ファイルのリストがあります: $pltemp.

例:

/Music/New/2010s/2011;Ziggy Marley;Reggae In My Head

上記の Master-Music-List.txt の 3 番目のフィールドを grep したいのですが、2 番目のフィールドに対して別の grep を続けます。両方が一致した場合は、else echo "Not Matched" を出力します。

したがって、上記は曲のタイトル (Reggae In My Head) を検索し、成功のために同じ行にアーティスト「Sh​​aggy」があることを確認します。

これまでのところ、非変数の grep は成功しています。

$ grep -i -w -E 'shaggy.*angel' Master-Music-MM-Playlist.m3u
$ if ! grep Shaggy Master-Music-MM-Playlist.m3u ; then echo "Not Found"; fi
$ grep -i -w Angel Master-Music-MM-Playlist.m3u | grep -i -w shaggy

処理する「全体」リストを最適に構築する方法がわかりません。

  • これを一行でやりたい。

これを使用して、リストを変数にダンプしました$pltemp...

オリジナル:\Music\New\2010s\2011\Ziggy Marley - Reggae In My Head.mp3

$ pltemp="$(cat Reggae.m3u | sed -e 's/\(.*\)\\/\1;/' -e 's/\(.*\)\ -\ /\1;/' -e 's/\\/\//g' -e 's/\\/\//g' -e 's/.mp3//')"
4

3 に答える 3

4

「これをgrepしてから、それをgrep」したい場合は、grep自体よりも複雑なものが必要です。どうawkですか?

awk -F';' '$3~/title/ && $2~/artist/ {print;n=1;exit;} END {if(n=0)print "Not matched";}'

この検索をスクリプトとしてアクセスできるようにしたい場合は、同じことが単純に形を変えます。例えば:

#!/bin/sh

awk -F';' -vartist="$1" -vtitle="$2" '$3~title && $2~artist {print;n=1;exit;} END {if(n=0)print "Not matched";}'

これをファイルに書き込み、実行可能にし、探しているアーティストの部分文字列/正規表現を最初のコマンド ライン オプションとして、タイトルの部分文字列/正規表現を 2 番目のオプションとしてパイプします。

一方、探しているものは、もう少し複雑な正規表現かもしれません。あなたのためにbashでラップしましょう:

if ! echo "$pltemp" | egrep '^[^;]+;[^;]*artist[^;]*;.*title'; then
  echo "Not matched"
fi

必要に応じて、これを 1 行に圧縮できます。または、スタンドアロンのシェル スクリプトにするか、.bashrc ファイル内の関数にします。

于 2012-06-08T04:25:06.353 に答える
0
awk -F ';' -v title="$title" -v artist="$artist" '$3 ~ title && $2 ~ artist'
于 2012-06-08T04:25:23.040 に答える
0

さて、上記のどれもうまくいかなかったので、私はこれを思いつきました...

for i in *.m3u; do 
    cat "$i" | sed 's/.*\\//' | while read z; do 
        grep --color=never -i -w -m 1 "$z" Master-Music-Playlist.m3u \
        | echo "#NotFound;"$z" "
        done  > "$i"-MM-Final.txt;
done

各行が読み取られ ( \Music\Lady Gaga - Paparazzi.mp3)、パスが取り除かれ、曲がマスター ミュージック リストで検索され、見つからない場合はエコー"Not Found"され、新しいプレイリストに保存されます。

作品{解決済み}

とにかくありがとう。

于 2012-06-09T00:01:25.113 に答える