如何使用 sed 将除模式之外的其他字符串替换为其他字符串?

如何使用 sed 将除模式之外的其他字符串替换为其他字符串?

在将模式与文件中的另一个字符串匹配之前,我需要使用 sed 替换所有内容

我的文件中有各种路径。无论用户如何,这些路径的最后几个组件都是相同的,但是前几个组件将会改变。

对于 例如 对于用户1,该文件包含以下路径

build:
   - "/Users/user1/Projects/Stash/sdk/license.txt"

为了用户2,路径可以是

build:
   - "/Users/user2/Documents/Work/sdk/license.txt"

最后 2 个组件是“/sdk/license.txt“对于每个用户来说都是一样的。

我想用用户提供的路径替换这些组件之前的所有内容,因为它特定于该用户。如何使用 sed 来执行这种替换?我正在使用 Perl 脚本来实现同样的目的。

答案1

您可以简单地使用反向引用

sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'

这里

\(....\)用于分组匹配并保存以备将来使用,替换时使用,可以用作\1 \2变量名。

所以,根据你的要求,我把线分成三组

\(^[ ]*\- "\)为了space - "

\(.*\)对于要更换的零件,例如/Users/user2/Documents/Work

\(\/sdk\/license\.txt"$\)对于同一部分,即sdk/license.txt"

相关内容