Text-Processing

將文件中尖括號內的連字元替換為下劃線

  • April 11, 2022

我知道如何替換字元串;例如,將文件中的連字元替換為下劃線。

但是,對於給定文件中尖括號內的所有文本,我希望用下劃線替換所有連字元。

例如,下面的文件:

<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請返回並嘗試找到更多。

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