最後のスラッシュの前の行部分を取得します。

最後のスラッシュの前の行部分を取得します。

アルバムフォルダに「folder.jpg」のMPDアルバムカバーを表示するためのconkyスクリプトを作成しようとしています。私の現在の計画は、mpc -f %file%ファイル名とパスを印刷してから、実際のファイル名(つまり、最後/後のすべての項目)を切り取り、それをconkyのイメージオブジェクトへのパスとして使用することです。

grep/cut の使用に問題があります。特に、一部の曲は2つのフォルダに入れ子になっており、他の曲は1つのフォルダに入れ子になっているためです。 (grep -m 1 . |cut -f1 -d /シングルフォルダアルバムに適用可能)

どうすればいいですか?私が逃したより簡単な方法はありますか?

ベストアンサー1

sed以下を使用して残りを削除できます。すべては最後のスラッシュで始まります:

mpc -f %file% | head -1 | sed 's:/[^/]*$::'

このパターンは、/[^/]*$行末までのスラッシュを除くすべての文字が続くスラッシュと一致します。空の文字列に置き換えられます。目的の行の後にあるいくつかのステータス出力を
無視してくださいhead -1。ただし、最初に印刷しない方法については、以下を参照してください。

sedに慣れていない場合は、このコマンドが:使用されている理由で奇妙に思えるかもしれません。たとえば、以前にsed区切り記号を付けたコマンドを見たことがあります。式にはそれ自体が含まれているため、読みやすくするために区切り文字を使用することをお勧めします。あるいは、式で - をエスケープすることもできますが、そうしても読みやすくなりません。/'s/foo/bar/'://'s/\/[^\/]*$//'


これを使用する方法に応じて、mpc2つの追加のステータス行が提供されます。自動オプションは-qすべての出力をオフにします。必要な行を取得するには、現在再生中のファイルを明示的に印刷することとそれを組み合わせる必要があります-qが、それはすべてです。

mpc -q -f %file% current | sed 's:/[^/]*$::'

削除する代わりにすべては最後のスラッシュで始まります、明示的に印刷できます。最後のスラッシュ以前のすべて:

mpc -q -f %file% current | sed 's:^\(.*\)/.*$:\1:'

後ろにaなどの文字が続くすべての文字と一致します。最後の文字が一致する/ようにできるだけ一致します。/

おすすめ記事