我有一個包含很多路徑的檔案。我需要用當前路徑替換所有這些路徑(包含內部版本號)。換句話說,在我的檔案中,我喜歡:
/build/8b7yrg_k/12/src/main/myfile
我想要(如果我在 /build/home/0/):
/build/home/0/src/main/myfile
我正在嘗試做的是:
sed 's,/build/'. '/'[0-9] '/','$PWD',g
但是命令沒有找到模式。我還嘗試添加 \ 或洗掉 ' 但我無法匹配所需的模式
uj5u.com熱心網友回復:
有幾個問題:
- 在 POSIX BRE 模式中,
被視為文字字符,而不是限定符 - 在單引號中,未啟用變數擴展
- 替換缺少斜線(即使您修復了上述內容,當前目錄仍會粘在路徑的其余部分)。
您可以使用
sed -E 's,/build/[^/] /[0-9] /,'"$PWD"/',g'
sed 's,/build/[^/]*/[0-9]*/,'"$PWD"/',g'
詳情:
/build/[^/] /[0-9] /是一個 POSIX ERE 正則運算式(使用 啟用-E),它匹配/build/一個或多個字符,而不是一個或多個字符/,然后是一個/,一個或多個數字,然后是一個/chr/build/[^/]*/[0-9]*/是與上述相同的 POSIX BRE 模式"$PWD"/- 當前目錄變數在雙引號內,并且/添加了使這個替換模式起作用。
請參閱在線演示:
#!/bin/bash
s='/build/8b7yrg_k/12/src/main/myfile'
sed -E 's,/build/[^/] /[0-9] /,'"$PWD"/',g' <<< "$s"
sed 's,/build/[^/]*/[0-9]*/,'"$PWD"/',g' <<< "$s"
輸出:
/home/3octv4/src/main/myfile
/home/3octv4/src/main/myfile
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363911.html
下一篇:如何讀取Ctrl C作為輸入
