在将模式与文件中的另一个字符串匹配之前,我需要使用 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"