您好,我希望執行以下操作:
file= sample.out
替換任何位置的文本10-15,"77777"但僅限于以開頭的行ABC
到目前為止我有:
cat sample.out | sed -r 's/^ABC(.{9})/\177777/'
但是ABC在行的開頭被洗掉并77777插入到文本位置而不是替換該位置現有的字符。
uj5u.com熱心網友回復:
沒有例子我用這個。
檔案: repl.txt
0000000001111111111222222222233333333333
1234567890123456789012345678901234567890
ABCDEFGH<12345>IJKLMNOPQRSTUVWXYZ======:
使用此命令:
$ sed -e 's/^\(ABC.\{6\}\).\{5\}\(.*\)$/\177777\2/' repl.txt
0000000001111111111222222222233333333333
1234567890123456789012345678901234567890
ABCDEFGH<77777>IJKLMNOPQRSTUVWXYZ======:
uj5u.com熱心網友回復:
請嘗試以下awk程式,使用@Arnaud 帖子中的示例。
awk -v newVal="77777" '/^ABC/{print substr($0,1,9) newVal substr($0,16);next} 1' Input_file
解釋:簡單的解釋是,awk在這里使用程式。首先創建一個awk名為的變數newVal,其中有77777值。在主程式中檢查行是否從 ABC 開始,然后列印子字串(列印當前行中第 10 到 15 位以外的所有內容,在其位置列印新值)。如果不滿足條件(即:行不是從 ABC 開始的),則簡單地列印該行。
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed '/^ABC/{s/./&\n/14;T;s//\n&/10;s/\n.*\n/77777/}' file
ABC在一行的開頭進行模式匹配,用換行符分隔 10-14 個字符(5 個字符),并用替換字串替換它們以及它們之間的字符。
注意所使用的分隔符必須是唯一的(換行符不能是任何模式空間的一部分,因為 sed 使用換行符來定義模式空間)。此外,必須從最大到最小插入分隔符,因為換行符會擾亂從行首開始的計數。
要從特定位置覆寫,請使用:
sed -E '/^ABC/{s/./\n&/10;T;s/$/\n77777/;:a;s/\n.(.*\n)(.)/\2\n\1/;ta;s/\n//g}' file
替代:
sed -E 's/^(ABC.{6}).{5}/\177777/' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364380.html
