
$ echo -e 'CH12\nCH23au' | sed '/^CH/s=^=<b>='
<b>CH12
<b>CH23au
CH
by 로 시작하는 행을 일치시킬 수 있다는 것을 알고 있지만 ^CH
여러 패턴을 어떻게 일치시킬 수 있습니까?
예:
입력하다:
CH12
CH23au
산출:
CH12
<b>CH23au
<b>
특정 위치 ^CH
와 행 에만 배치하는 방법은 무엇입니까 au
?
답변1
합계의 순서 는 고정되어 있으므로 CH
해당 줄의 시작 부분에 나타나야 하는 경우 찾을 수 있습니다 .CH
au
^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>/
}