Bash
Bash - 替換引號之間的隨機數
我創建了一個腳本,它編寫類似 .flame/XML 的文件,其中包含一個字元串,如下所示:
scale="n"
其中n是一個隨機數,具有可變位數。我試圖做的是用特定範圍內的另一個隨機數替換這個字元串;生成這個數字是微不足道的,因為我已經為此目的工作了*shuf 。*嘗試查找和替換此字元串時會出現問題,因為它可能類似於以下任何內容:
scale="54.1948", scale="182.55816", or scale="3.59"
我已經嘗試過為此使用sed,雖然我確信這是可能的,但我還沒有找到正確的語法。該字元串的出現在文件之間不一致。
理想情況下,我正在尋找的命令將轉換如下所示的字元串:
scale="54.1948" or scale="3.59"
一個看起來像:
scale"254" or scale="579"
謝謝你的幫助。
您正在尋找的語法是
sed -e 's/\(scale=\)"[0-9]\+\(\.[0-9]\+\)\?"/\1"'"$replacement_number"'"/'
. 詳細搜尋正則表達式:\(scale=\) the literal string scale=, remembered as \1 " opening double quote [0-9]\+ one or more digits \(\.[0-9]\+\)\? optionally, a period followed by one or more digits " closing double quote
這是一個更簡單、更通用的解決方案。
-e
此解決方案不使用擴展的 sed 語法 ( ) 和反向引用。這將用數字替換雙引號之間的所有內容
$n
。基本
sed
命令如下所示:s/scale="[^"]*"/scale="$n"/
該表達式
[^"]*
匹配零個或多個非雙引號字元。引用後,shell
命令如下所示:sed "s/scale=\"[^\"]*\"/scale=\"$n\"/"
如果您只想更改僅
scale
包含數字和小數點的值,則可以使用如下所示:s/scale="[.0-9]*"/scale="'$n"/
通常在輸入檢查與可讀性和可維護性之間進行權衡。