Bash

Bash - 替換引號之間的隨機數

  • January 4, 2017

我創建了一個腳本,它編寫類似 .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"/

通常在輸入檢查與可讀性和可維護性之間進行權衡。

引用自:https://unix.stackexchange.com/questions/334775