Q
替換字符
1
A
回答
3
目前尚不清楚你的意思是「列」,但也許這是你想要使用GNU AWK的gensub()什麼:
$ echo iqwertyuiop | awk '{print substr($0,1,3) gensub(/i/,"Z","g",substr($0,4))}'
iqwertyuZop
1
最直觀的方法是使用awk
:
awk 'BEGIN{FS="";OFS=FS}{for(i=4;i<=NF;i++){if($i=="i"){$i="Z"}}}1' file
FS=""
由字符將輸入字符串轉換成田。我們迭代低谷字符/字段4結束並用Z
替換i
。
最後的1
評估爲true
並且使awk
打印修改的輸入行。
隨着sed
它看起來不是很intutive但它仍然是可能的:
sed -r '
h # Backup the current line in hold buffer
s/.{3}// # Remove the first three characters
s/i/Z/g # Replace all i by Z
G # Append the contents of the hold buffer to the pattern buffer (this adds a newline between them)
s/(.*)\n(.{3}).*/\2\1/ # Remove that newline ^^^ and assemble the result
' file
1
這完全是理想的tr
命令,只要你沒有要求前3字符保持不變。
但是,如果你是沒事使用一些bash的技巧加上cut
和paste
,你可以將文件分割成兩個部分,並將其粘貼到一起後記:
paste -d'\0' <(cut -c-3 foo) <(cut -c4- foo | tr i Z)
上述用途paste
兩個歸隊一起與cut
分開的文件部分。第二部分通過tr
通過管道將i轉換爲Z's。
1
(1)下面是完成一個短期和簡單的方法任務使用GNU sed的:
sed -r -e ':a;s/^(...)([^i]*)i/\1\2Z/g;ta'
這需要循環(t
),所以不會像非循環的方法一樣有效。上面也可以使用轉義括號而不是非轉義字符來編寫,因此不需要-r選項。 sed的其他實現應該(原則上)完成任務,但是您的MMV。
(2)這是很容易使用, 「舊的AWK」 以及:
awk '{s=substr($0,4);gsub(/i/,"Z",s); print substr($0,1,3) s}'
3
Perl是得心應手這樣的:你可以分配到子
$ echo "iiiiii" | perl -pe 'substr($_,3) =~ s/i/Z/g'
iiiZZZ
相關問題
- 1. python替換字符而不替換已替換的字符
- 2. 替換「^」字符
- 3. 替換字符
- 4. 替換字符
- 5. 替換字符
- 6. 字符替換
- 7. 替換字符串字符
- 8. 字符串替換交替
- 9. 增強字符串替換不會替換換行字符串
- 10. Chrome字符替換
- 11. 替換字符串
- 12. 替換字符串
- 13. Solr - 字符替換
- 14. 字符串替換
- 15. Unicode替換字符
- 16. 替換字符串
- 17. 替換字符的
- 18. 替換字符串
- 19. php替換字符
- 20. 替換多字符
- 21. 替換字符串
- 22. 替換字符串
- 23. C++字符替換
- 24. 替換Unicode字符
- 25. 替換字符串[]
- 26. 替換字符串
- 27. 替換字符串
- 28. 替換字符串
- 29. 替換Unicode字符
- 30. XSL替換字符()
你能不能1)使用'y/i/Z /'(保存一個完整的字符!)2)而不是'x; s; G; s' do'G; s /(。*)\ n(...)。*/\ 2 \ 1 /'? –
@BenjaminW。1)'y'命令在多行版本後需要一個';',如果它後面有註釋。不要問我爲什麼。 2)好點!補充說 – hek2mgl