我有一个简单的文本文件,其中包含几行数据,每行正好有26个字符。例如
10001340100491938001945591
10001340100491951002049591
10001340100462055002108507
10001340100492124002135591
10001340100492145002156507
10001340100472204002205591
Run Code Online (Sandbox Code Playgroud)
现在,如果只有这两个字符都是49,则我想用字符58替换第12和13个字符。
我这样尝试过:
sed 's/^(.{12})49/\58/' data.txt
Run Code Online (Sandbox Code Playgroud)
但出现此错误:
sed: -e expression #1, char 18: invalid reference \5 on `s' command's RHS
Run Code Online (Sandbox Code Playgroud)
提前致谢
捕获的组是\1,因此您要放置 11 个(不是 12 个)字符,然后58:
sed -E 's/^(.{11})49/\158/' data.txt
Run Code Online (Sandbox Code Playgroud)
您还需要-E或者-r如果您不想转义方括号和大括号。
根据您的输入,命令将更49改为58第 1、2、4 和 5 行。
如果您想尝试awk解决方案:
awk 'substr($0,12,2)==49 {$0=substr($0,1,11)"58"substr($0,14)}1' file
10001340100581938001945591
10001340100581951002049591
10001340100462055002108507
10001340100582124002135591
10001340100582145002156507
10001340100472204002205591
Run Code Online (Sandbox Code Playgroud)