почему существует 1! H, потому что мне 1 ч перезаписывает пространство шаблона и 1! H бесполезен
Никакая перезапись не происходит, поскольку они не выполняются на той же входной строке:
1h # when input line number is 1, copy pattern space to hold space
1!H # when input line number is not 1, append pattern space to hold space
Это необходимо потому что согласно info sed
:
`H'
Append a newline to the contents of the hold space, and then
append the contents of the pattern space to that of the hold space.
Таким образом, если Вы используете просто H
для добавления всех строк перед первой строкой будет дополнительная новая строка:
bash-4.2$ seq 3 | sed -n 'H; ${g; p;}'
1
2
3
bash-4.2$ seq 3 | sed -n '1h; 1!H; ${g; p;}'
1
2
3
Это 245256667 байт файла. Если вы выполните:
dd if=2001.txt of=error.txt bs=1 count=10 skip=245256667
Вы сможете увидеть недопустимую последовательность utf8, выполнив hexdump -C error.txt
С помощью vim
вы можете просто
:go POSITION+1
напр.
:go 245256668
или в командном режиме:
POSITION+1go
то есть
245256668go