Text-Processing
將文件中尖括號內的連字元替換為下劃線
我知道如何替換字元串;例如,將文件中的連字元替換為下劃線。
但是,對於給定文件中尖括號內的所有文本,我希望用下劃線替換所有連字元。
例如,下面的文件:
<charset-params> <input-charset> <resource-path>/*</resource-path> <java-charset-name>UTF-8</java-charset-name> </input-charset> </charset-params>
應改為:
<charset_params> <input_charset> <resource_path>/*</resource_path> <java_charset_name>UTF-8</java_charset_name> </input_charset> </charset_params>
請注意,
UTF-8
它沒有改變,因為它不在尖括號內。我怎樣才能做到這一點?
做
sed ': loop; s/\(<[^>]*\)-\([^>]*>\)/\1_\2/g; t loop'
s/\(<[^>]*\)-\([^>]*>\)/\1_\2/g
查找 a ,<
一堆(零個或多個)不是>
的字元,一個連字元 (-
),另一個是一堆不是 的字元,>
最後是一個>
. 它用-
, 和之前的_
部分和 . 之後的部分替換它-
。操作員將g
導致它一次執行多個替換,但它一次只能執行一個<
……>
。所以,例如,<the-quick><brown-fox> <jumps-over> upside-down <the-lazy-dog>
將更改為
<the_quick><brown_fox> <jumps_over> upside-down <the-lazy_dog>
請注意,只有包含連字元的每個
<
…>
單詞都被更改了,但有兩個連字元 (<the-lazy-dog>
) 的單詞只更改了第二個-
。說,如果進行了任何替換,t loop
請返回並嘗試找到更多。