例如。输入文字文件
line 1 - Abchsffmskdv
line 2 - bsdvnld
line 3 - fsdgdhdh
如果第1行的位置9是s,则将第3行的位置4更改为k
输出:
line 1 - Abchsffmskdv
line 2 - bsdvnld
line 3 - fsdkdhdh
答案 0 :(得分:0)
请尝试以下操作:
sed '
/^.\{8\}s/ { # if the 9th char == "s" then
$!n # flush current line and read next line (unless eof)
$!n # same as above to proceed to the line after next
$!s/^\(.\{3\}\)./\1k/ # replace the 4th char with "k"
}' input.txt
或单线:
sed '/^.\{8\}s/{$!n; $!n; $!s/^\(.\{3\}\)./\1k/}' input.txt
input.txt如下:
Abchsffmskdv
bsdvnld
fsdgdhdh
iiiiiiiisiii
iiiiiii
iiiiiiii
输出:
Abchsffmskdv
bsdvnld
fsdkdhdh
iiiiiiiisiii
iiiiiii
iiikiiii
您将看到上面的脚本替换了下一个下一个的第4个字符 如果找到模式,则与行号无关。 如果您想将行号固定为例如第一行,请尝试:
sed '
1 {
/^.\{8\}s/ {
$!n
$!n
$!s/^\(.\{3\}\)./\1k/
}
}' input.txt
输出:
Abchsffmskdv
bsdvnld
fsdkdhdh
iiiiiiiisiii
iiiiiii
iiiiiiii
仅修改第三行。
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed -E '1h;3{G;s/(...).(.*)\n.{8}s/\1k\2/}' file
将第一行存储在保留空间中,并将其添加到第3行,并根据所需条件进行模式匹配。
替代方法:
sed -E '1h;3{x;/^.{8}s/{x;s/./k/4;x};x}' file