web-dev-qa-db-ja.com

sed textreplaceコマンドの前の条件付き検索でgrepを使用する方法

たくさんのm3uファイルのパスを変更しようとしています。私はregexxerf.eでそれができることを知っています。しかし、私はbashを学ぼうとしています。

これは私が理解したコマンドですが、機能していません。

grep -lr -i -e 'M:\\' * | xargs -0 sed -i 's/M:\\/T:\\/g'

ファイル名の特殊文字が原因であると思われますが、疑わしいだけです。どのように対処するのですか?

1
sleepless

最後に私は答えを見つけました:

grep -lr -i -Z -e 'm:\\' * | xargs -0 sed -i 's/M:\\/K:\\/g'

1つの長い文字列の束全体ではなく、すべてのファイル名が読み取られるように、-Zを追加する必要がありました。

3
sleepless

これはトリックをしました:

windowsパスを変更するにはM:\Ubuntuのマウントポイントへmedia/MODERNE MUZIEK

find -iname '*.m3u' -print0 | 
    xargs -0 sed -i 's/M:\\//\/media\/MODERNE\ MUZIEK\//g'

バックスラッシュをフォワードスラッシュに変更するには

find -iname '*.m3u' -print0 | xargs -0 sed -i 's/\\/\//g'

これで、UbuntuのVLCプレーヤーで元のWindowsm3uファイルを開くことができます。
ファイル名にいくつのスペースや奇妙な文字が含まれていても再生されます。

これは改善できますか? grepを使用して、最初に失敗した試行のように条件付きにすることはできますか? grepが機能しなかったのはなぜですか?

入力ありがとうございます。

1
sleepless