例如:
input [TOTAL_CH-1:0] start_frame_i, // start of frame
改成:
input [TOTAL_CH-1:0] i_start_frame, // start of frame
補充說明:上面有很多不同的字串。
uj5u.com熱心網友回復:
GNU sed。
cat file.txt | sed -r 's/(\w )_i\b/i_\1/g'
(\w )_i\b
(\w )_i匹配一個或多個以字串結尾的字符_i并保存在_i捕獲組內部之前的字串(\w )。\b單詞邊界以確保它是單詞的結尾,而不是匹配start_frame_iAAA會導致i_start_frameAAA
i_\1將匹配的字串替換i_為開頭的,以及\1我們之前保存在捕獲組中的值。
uj5u.com熱心網友回復:
我將假裝您的bash標簽意味著對使用 bash 的解決方案感興趣。
#!/usr/bin/env bash
while read line; do
while [[ $line =~ ^(.* )(([a-z_] )_i)([^a-z_].*)$ ]]; do
line="${BASH_REMATCH[1]}i_${BASH_REMATCH[3]}${BASH_REMATCH[4]}"
done
echo "$line"
done
此腳本遍歷標準輸入讀取行。對于每一行,它都會嘗試使用帶括號的正則運算式來查找您的源模式。Bash 將帶括號的子運算式存盤到陣列BASH_REMATCH中,因此每次找到它時,我們都會重新組合該行。當所有替換完成后,我們列印該行。
你可以用 sed 做同樣的事情,它不是 bash 的一部分,但幾乎無處不在:
sed 's/\([a-z][a-z_]*\)_i\([^a-z_].*\)/i_\1\2/g' input.txt
這避免了不可移植的 ERE的-ror 。-EBRE 正則運算式有點笨拙,但有更廣泛的支持,尤其是在 sed 等標準工具中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532828.html
標籤:重击
