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:使用扩展正则表达式

相关内容