여러 패턴과 일치하는 sed의 줄만 바꾸는 방법은 무엇입니까?

여러 패턴과 일치하는 sed의 줄만 바꾸는 방법은 무엇입니까?
$ echo -e 'CH12\nCH23au' | sed '/^CH/s=^=<b>='
<b>CH12
<b>CH23au

CHby 로 시작하는 행을 일치시킬 수 있다는 것을 알고 있지만 ^CH여러 패턴을 어떻게 일치시킬 수 있습니까?

예:

입력하다:

CH12
CH23au

산출:

CH12
<b>CH23au

<b>특정 위치 ^CH와 행 에만 배치하는 방법은 무엇입니까 au?

답변1

합계의 순서 는 고정되어 있으므로 CH해당 줄의 시작 부분에 나타나야 하는 경우 찾을 수 있습니다 .CHau^CH.*au

$ echo -e 'CH12\nCH23au' | sed '/^CH.*au/s=^=<b>='
CH12
<b>CH23au
$

두 모드의 순서가 고정되어 있지 않으면 다음과 같이 할 수 있습니다.

sed -e '/pattern1/{;/pattern2/s/old/new/;}'

하지만 펄 솔루션은

perl -pe 'if (/pattern1/ && /pattern2/) {s/old/new/;}'

더 읽기 쉬울 수도 있습니다.

답변2

또 다른 방법:

sed -e '/^CH/!b' -e '/au/!b' -e 's/^/<b>/'

b(레이블 인수가 주어지지 않으면 끝까지 분기됩니다.) continue다른 언어와 유사하거나 다른 언어에서 사용됩니다. next따라서 위의 내용은 다음과 같습니다.

for (; line = readline(); print line) { # The implicit loop in sed
  if (!/^CH/) continue;
  if (!/au/) continue;
  line =~ s/^/<b>/
}

관련 정보