sed は文字列の中間を置き換えます。

sed は文字列の中間を置き換えます。

設定ファイルを介して自分の壁紙を変更するライナーを作成しようとしています。適応してみてください:sedを使用した正規表現キャプチャグループコンテンツの置き換えしかし、正しく理解できないようです。

私の設定ファイルには次の文字列が含まれています。

output * bg ~/pictures/wallpapers/old-wallpaper.jpg fill

この文字列のパスを別のパスに変更したいと思います。

これは私にとって最も意味がありますが、正しくキャプチャしません。

sed "/output \* bg /s|.* fill|~/path/to/foobar.jpg fill|" sed_file

output * bg ~/pictures/wallpapers/old-wallpaper.jpg fill

これは完全に間違っているように見えますが、作業が完了したようです。私はそれがで始まるすべてを置き換えると思いますoutput

sed "/output \* bg/s| .* fill| \* bg ~\/path\/to/foobar.jpg fill|" sed_file

output * bg ~/path/to/foobar.jpg fill

答え1

GNU sedを使用してください。あなたのパスにスペースやパイプが含まれていないとします。s///から切り替えましたs|||

sed -E 's|^(output \* bg) [^ ]+ |\1 foo |' file

出力:

出力 * bg foo パディング

-E: 拡張正規表現の使用

関連情報