[英]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.