이 sed 명령 `;/@/{h;s/test/next/g;x;G}`의 의미는 무엇입니까?

이 sed 명령 `;/@/{h;s/test/next/g;x;G}`의 의미는 무엇입니까?
sed -e 's/72;/72, next_val = 0x11111111;/;/@/{h;s/test/next/g;x;G}'
fmt_vuln.c > fmt_vuln2.c

무슨 뜻인지 알려주실 수 있나요 ;/@/{h;s/test/next/g;x;G}?

답변1

;/@/{h;s/test/next/g;x;G}? 

/@/  search for an `@` sign
{}   for the lines where that is true do this 'block' of code
h    put the pattern match in the hold space
s/   substitute test for next everywhere in the space
g    do the previous substitution for all matches on the line
x    swap the hold with the pattern space
G    Add a new line with the contents of the hold space.

답변2

/@/ # For pattern-space containing the character @ do the following
{
  h              # place a copy of the pattern-space into the hold-space
  s/test/next/g  # replace all instances of "test" with "next" in the pattern-space
  x              # swap the pattern-space with the hold-space
  G              # append a newline followed by contents of hold-space to the pattern-space
}

따라서 @가 포함된 각 줄에 대해 패턴 공간의 수정된 버전이 인쇄된 다음 원래 버전이 인쇄됩니다(수정되지 않은 버전이 포함된 공간은 그대로 유지).

바라보다Sed 명령 요약

관련 정보