基本sed問題:
這種sed替換可以很好地用 Z 替換 Ns 字串:
cat test1 | sed -E "s/N{10}/Z/g"
但反過來用文字字串“N{10}”替換 Z
cat test2 | sed -e "s/Z/N{10}/g"
并回傳如下內容:AAAA**N{10}**AAAA
如何用 10 Ns 的字串替換“Z”? 我知道我可以輸入NNNNNNNNNN命令sed,但我正在嘗試理解語法。由于某種原因N{10},在要替換的情況下作業,但不是替換為。我嘗試了多種方法,但找不到任何有效的方法。
任何建議將被認真考慮。
uj5u.com熱心網友回復:
perl可以做到:
perl -pe 's/Z/"N" x 10/ge' file
使用N x 10,您明確要求重復 10 次N
uj5u.com熱心網友回復:
但我試圖理解語法
來自https://pubs.opengroup.org/onlinepubs/009604499/utilities/sed.html:
s/BRE/替換/標志
用替換字串替換模式空間中的 BRE 實體。[...]
替換字串應從頭到尾掃描。替換中出現的 & 符號 ('&') 應替換為與 BRE 匹配的字串。在這種情況下,'&' 的特殊含義可以通過在它前面加一個反斜杠來抑制。字符“\n”,其中 n 是一個數字,應被相應的反向參考運算式匹配的文本替換。"\n" 的特殊含義,其中 n 在此背景關系中是一個數字,可以通過在它前面加一個反斜杠來抑制。對于遇到的其他反斜杠('\'),后面的字符將失去其特殊含義(如果有)。'\' 后面緊跟除 '&'、'\'、數字或用于此命令的分隔符之外的任何字符的含義未指定。
通常&and \1 \2... \9and\\在替換中是“特殊的”。還有一個\n不在 POSIX 標準中的替換串列,但它在sed實作中受支持。還有https://www.gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command。
BRE是:
sed 實用程式應支持 IEEE Std 1003.1-2001 的基本定義卷第 9.3 節基本正則運算式中描述的 BRE,并添加以下內容:[...]
在正則運算式 {10}中意味著匹配一個重復 10 次的組。BRE 和替換有非常不同的規則,正則運算式用于匹配而不是生成字串。
我可以推薦https://regexcrossword.com/來有趣地??學習正則運算式。
uj5u.com熱心網友回復:
使用sed
$ sed "s/Z/echo $(printf -- 'N%.0s' {1..10})/e" input_file
NNNNNNNNNN
uj5u.com熱心網友回復:
使用 sed 加 bash:
$ echo 'fooNxyzNbar' | sed "s/N/$(printf 'Z%.0s' {1..10})/g"
fooZZZZZZZZZZxyzZZZZZZZZZZbar
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483403.html
下一篇:Perl:陣列參考的負范圍索引
