Shell-Script

將 <1> 更改為 _1

  • September 19, 2017

我需要改變類似的東西

&lt;1&gt; to _1
&lt;21&gt; to _21

有沒有一種方法可以使用 sed、awk 或 vi 自動執行此操作?

注意:尖括號內的數字各不相同。

sed

sed 's/&lt;\([0-9]*\)&gt;/_\1/g'

在問題中的範例上執行它會產生

_1 to _1
_21 to _21

該模式&lt;\([0-9]*\)&gt;匹配內部任意數量的數字&lt;...&gt;。替換文本用&lt;...&gt;前綴為 的數字(如果有的話)替換這一位輸入_


在六中:

:%s/&lt;\([0-9]*\)&gt;/_\1/g

sed由於明顯的歷史原因,這相當於解決方案。


如果你在 Bash&lt;21&gt;的 shell 變數中有字元串:var

printf '%s\n' "_${var//[&lt;&gt;]/}"

_21這將使用變數替換列印${parameter//pattern/string}


tr. 注意:這看起來像是在處理非常有限的一組輸入。它盲目地替換&lt;_刪除&gt;,而不考慮它們發生的位置:

tr '&lt;' '_' &lt;file.in | tr -d '&gt;'

這更像是一個玩笑的解決方案,而不是任何嚴肅的解決方案,但如果輸入中出現的唯一和是介於兩者之間的數字,那麼它將起作用。&lt;``&gt;

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