I need to replace a character (it can be either X, L,H,1,0) in a specific index in some specific line in a file using vim/sed/awk
etc.
Eg:
File:
0101010HLHLHLHL
1010100LHHHLHLH
1000000HHLLHHLL
LHLHLHLHLLLLHLH
So I need to replace 8th character in line 2 to X
.
0101010HLHLHLHL
1010100XHHHLHLH
1000000HHLLHHLL
LHLHLHLHLLLLHLH
答案 0 :(得分:3)
您可以使用此USE CPC3;
:
sed
使用sed '2s/./X/8' file
选项进行就地编辑。
下面,
-i
- 行号2
- 仅在s/./X/8
出现时将.
(匹配任何一个字符)替换为X
。答案 1 :(得分:2)
我的第一篇ed
!
ed -s file <<<$'e\n2s/./X/8\nw'
有3个命令,每个命令由换行符\n
分隔。我正在使用bash所以我已经选择了一个herestring <<<
的组合来通过标准输入和一个&#34; C字符串传递命令&#34;使用$''
,以便我可以使用\n
作为换行符。
这三个命令是:
e
:编辑2/s/./X/8
:在第二行,将第8个字符替换为X
w
写文件 -s
会抑制命令的任何输出。
答案 2 :(得分:2)
使用GNU awk for gensub():
$ awk -v i=8 'NR==2{$0 = gensub(/./,"X",i)} 1' file
0101010HLHLHLHL
1010100XHHHLHLH
1000000HHLLHHLL
LHLHLHLHLLLLHLH
其他问题:
$ awk -v i=8 'NR==2{$0 = substr($0,1,8-1) "X" substr($0,i+1)} 1' file
0101010HLHLHLHL
1010100XHHHLHLH
1000000HHLLHHLL
LHLHLHLHLLLLHLH
答案 3 :(得分:0)
在Vim中,如果您在第1行的文件中:
j8lrX
如果你在另一条线上:
2G8lrX
如果您不在档案中:
vim file +2 +normal\!\ 8lrX
+2
表示:打开文件并将光标移动到第2行。+normal\!\ 8lrXZZ
表示:在vim中执行:normal! 8lrX
。您也可以使用ZZ
直接保存。
答案 4 :(得分:0)
这是一个vim单行::2,2s/\(.\{7\}\)./\1X/
说明:
:2,2s///
确保仅替换第二行。^\(.\{7\}\).
将前7个字符匹配到一个组中,然后将第8个字符匹配到组外\1X
是替代品:\1
是第一个匹配的组,即前7个字符。然后X
是您指定的替代品。