晚上好大家。我正在嘗試*.js使用 unix sed 腳本替換檔案中的路徑。所以,我寫了正確的正則運算式并且 sed 沒有落下,但我無法得到正確的結果。
UPD:我正在使用 macOS
傳入字串:import * as module from "/test"
我的正則運算式:
\s\*import(. )from\s \['\\"\](\\/. )[^\n]
找到一個路徑模式并回傳我需要的兩個組(* as module和/test.js)
例如,我需要更改import \* as module from "/test"為 import \* as module from "/myFolder/test.js"
所以,但是我的 bash 命令
echo 'import * as module from "/test.js"' |
sed -r "s:\s*import(. )from\s ['\"](\/. )[^\n] :import \1 from \"\/myFolder\2\":g "
回傳原始字串!請問您能幫忙嗎,有什么問題嗎?
uj5u.com熱心網友回復:
使用gnu-sed:
s='import * as module from "/test.js"'
sed -E "s~\\b(import. from )(['\"])([^'\"] )\2~\1\2/myFolder\3\2~g" <<< "$s"
import * as module from "/myFolder/test.js"
正則運算式解釋:
\\b: 匹配一個單詞邊界(import. from ): 匹配從單詞開始的字串,import后跟任意字符的 1 ,然后是from兩邊用空格包圍的單詞(['\"]): 匹配一個'或"作為開場白并在第 2 組中捕獲([^'\"] ):匹配 1 的任何不是引號的字符并在組 #3 中捕獲\2: 匹配與開頭參考相同的參考
在 OSX 上使用這個sed:
sed -E "s~(import. from )(['\"])([^'\"] )~\1\2/myFolder\3~g" <<< "$s"
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。用 GNU 撰寫和測驗awk。
s='import * as module from "/test.js"'
echo "$s" | awk '/^import.*from[[:space:]] "\//{sub(/\//,"/myFolder&")} 1'
說明:以下是上述代碼的詳細說明。
- 創建一個名為的變數
s,其中包含所有值作為awk程式的輸入。 - 通過命令列印
echo并將其作為標準輸入傳遞給awk此處的程式。 - 在
awk程式檢查條件中,如果一行滿足^import.*from[[:space:]] "\/正則運算式(基本上檢查行是否從匯入開始直到從后跟空格,然后是“/),如果這是 TRUE,則將發生以下操作。 - 根據要求使用
subof 函式awk執行替換以/替換/myFolder/。 - 然后提到
1的是一種列印當前行的方法awk。
uj5u.com熱心網友回復:
使用sed
$ sed 's|/[^"]*|/myFolder&|' input_file
import * as module from "/myFolder/test.js"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425662.html
上一篇:一個個殺死子行程
下一篇:用用戶輸入值填充動態陣列
