Regex 使用字符串替换取消基于正则表达式的配置行的注释
我有一个配置文件,其中包含一堆被注释掉的repo URL。我需要取消注释一个特定的正则表达式,并认为sed将使匹配正则表达式变得容易,然后在该行上进行字符串替换 我想知道我的正则表达式对于sed语法是否正确,或者sed命令是否不正确Regex 使用字符串替换取消基于正则表达式的配置行的注释,regex,bash,sed,Regex,Bash,Sed,我有一个配置文件,其中包含一堆被注释掉的repo URL。我需要取消注释一个特定的正则表达式,并认为sed将使匹配正则表达式变得容易,然后在该行上进行字符串替换 我想知道我的正则表达式对于sed语法是否正确,或者sed命令是否不正确 mirrorRegex="^# http.*vendor.*distroARCH-1.1\/" sed '/$mirrorRegex/s/# //' /etc/repos 之前: # ftp://mirrors.example.com/distro/distroA
mirrorRegex="^# http.*vendor.*distroARCH-1.1\/"
sed '/$mirrorRegex/s/# //' /etc/repos
之前:
# ftp://mirrors.example.com/distro/distroARCH-1.1/
# http://mirrors.example.com/distro/distroARCH-1.1/
# ftp://packages.vendor.org/distro/distro/distroARCH-1.1/
# http://packages.vendor.org/distro/distro/distroARCH-1.1/
# http://mirror.school.edu/pub/distro/distroARCH-1.1/
# http://system.site3.com/distroARCH-1.1/
之后:什么是预期的
# ftp://mirrors.example.com/distro/distroARCH-1.1/
# http://mirrors.example.com/distro/distroARCH-1.1/
# ftp://packages.vendor.org/distro/distro/distroARCH-1.1/
http://packages.vendor.org/distro/distro/distroARCH-1.1/
# http://mirror.school.edu/pub/distro/distroARCH-1.1/
# http://system.site3.com/distroARCH-1.1/
您需要使用双引号来展开shell变量:
sed "/$mirrorRegex/s/# //"
您可以像这样使用
awk
执行相同的操作:
awk '$0~var {sub(/^# /,x)}1' var="$mirrorRegex" file
使用默认分隔符以外的其他分隔符(在本例中为|
)将有所帮助
和可变版本
Content='http.*vendor.*distroARCH-1.1/'
sed "s|^#[[:blank:]]*\(${Content}.*\)|\1|" YourFile
这不是你所期望的吗?@UriMikhli第二部分是我所期望的,但它不起作用。anubhava指出,在运行sed时,我使用的是单引号,它没有扩展shell变量。哇,我不知道为什么我不记得了。谢谢你,我不觉得自己很愚蠢。我会尽快接受这个答案。非常感谢你给我看。我想awk也能用,我正在努力学习sed和awk。
Content='http.*vendor.*distroARCH-1.1/'
sed "s|^#[[:blank:]]*\(${Content}.*\)|\1|" YourFile