\x
расширяется до того, что захвачено в группе захвата x th , причем группы захвата нумеруются слева направо в зависимости от наличия открывающей скобки в регулярном выражении.
echo "abcd_aefghi" | sed -r "s/(a)(b)(c)(d)|(a)(e)(f)(g)/\8/g;"
1 2 3 4 5 6 7 8
Это регулярное выражение совпадает дважды. Один раз на abcd
(, где 8 -я группа захвата ничего не захватывает )и один раз на aefg
, где 8 -я группа захвата захватывает g
. Таким образом, abcd
заменяется ничем, а aefg
на g
, а _
и hi
остаются нетронутыми, поэтому вы получаете _ghi
, как и ожидалось.
В:
sed -r "s/(a)(b)(c)(d)()|((a)(e)(f)(g))/\8/g"
1 2 3 4 5 67 8 9 10
Вы получаете _ehi
, потому что 8-я -я группа теперь (e)
.
sed -r "s/(a)(b)(c)(d)()||||i am Not comment, Whats going here?|||||||((a)(e)(f)(g))/\8/g"
1 2 3 4 5 67 8 9 10
ничем не отличается. За исключением (, хотя этого не видно ), что из-за ||
будут пустые совпадения между h
и i
и дополнительный в конце (еще несколько сperl
).
сброс чисел на основе оператора чередования не сделал бы очень удобный API. Если вы хотите расширить до того, что соответствует 4 й группе захвата по обе стороны от чередования в вашем примере, вы всегда можете сделать:
sed -r 's/(a)(b)(c)(d)|(a)(e)(f)(g)/\4\8/g'
1 2 3 4 5 6 7 8
Что дало бы вам то же самое, что иperl
:
perl -lpe 's/(?|(a)(b)(c)(d)|(a)(e)(f)(g))/\4/g'
1 2 3 4 1 2 3 4
(где \4
может расширяться до того, что (d)
или (g)
захвачено ).
Вы можете смонтировать образ файловой системы непосредственно в свою файловую систему:
mkdir -p /mnt/img
mount -o ro,noload imagefile.img /mnt/img
, а затем вы можете получить файл непосредственно из соответствующего места под /mnt/img
. (Опции ro,noload
монтируют файловую систему только для чтения -. Опустите их оба, если вам нужен доступ для чтения/записи.)
Затем размонтируйте файл с помощью
umount /mnt/img