[英]Regex with sed using quotation mark
我需要更改文件中的部分文本。 我尝试在bash中编写一个脚本来更新包含其他/旧JAVA_HOME的PATH。 我的正则表达式应该找到包含如下路径的文本部分,并使用sed命令对其进行更改。
/**/jdk/jdk.*/bin
我做了正则表达式:
([/])[^ /] ([/] jdk [/] jdk)。 ?([/] bin)中
(/)[^ /] (/ jdk / jdk)。 ?(/ bin中)
。 BASH_ENV
JAVA_HOME="/opt/jdk/jdk1.8.0_151"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/jdk/jdk1.8.0_151/bin:example/not/for/change/bin"
预期产量
JAVA_HOME="/opt/jdk/jdk1.8.0_151"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:CHANGED:example/not/for/change/bin"
sed命令
sed -r 's#([/])[^\/]*([/]jdk[/]jdk).*?([/]bin)#CHANGED#g' ~/.bash_env
题
我用sed和regex尝试了很多变体,但是在不停止第一个/ bin的情况下它无法工作或更改所有路径。 我认为问号有问题,但也许有人可以给我建议? 或帮助为sed编写正则表达式?
UPDATE.1无法解决我的问题的示例
例如.bash_env
PATH="/usr/local/sbin:/opt/jdk/jdk1.8.0_151/bin:/example/not/jdk/for/change/bin"
我的sed
sed -r 's#([/])[^\/]*([/]jdk[/]jdk).*?([/]bin)#CHANGED#g' ~/.bash_env
给定结果
PATH="/usr/local/sbin:CHANGED"
预期结果
PATH="/usr/local/sbin:CHANGED:/example/not/jdk/for/change/bin"
正则表达式(带有sed)应更改以下单词:
- 以。。开始 '/'
-不包含“:”
-包含“ jdk / jdk”
-以'/ bin'结尾
你可以试试这个sed
echo $PATH | sed 's/\([^:]*\)/CHANGED/8'
我认为搜索路径并不总是在同一地方,因此请尝试使用此路径。
echo $PATH | sed 's#\(.*\)\(:/.*jdk[^:]*\)\(:.*\)#\1:CHANGED\3#'
您可以测试一下:
echo $path | sed 's#\(.*\)\(:*\)\(/.*/jdk/jdk[0-9._]*/bin\)\(:*\)\(.*\)#\1\2CHANGED\4\5#'
我尝试使用开始位置,结束位置和中间位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.