특정 패턴과 일치하는 행을 수정하기 위해 awk를 어떻게 사용할 수 있습니까? 단, 다음 행이 다른 패턴과 일치하지 않는 경우에만 해당됩니까?
다음 스니펫을 예로 들어 보겠습니다.
....
pattern1 100 200 300
pattern1 300 400 400
pattern2 300 900 700
pattern1 200 500 900
...
pattern1
포함된 줄 다음에 오는 두 번째 줄을 제외하고 포함된 모든 줄을 수정하고 싶습니다 pattern2
.
이는 다음과 유사합니다.이 문제, 그러나 정반대입니다.
답변1
다음과 같은 것을 시도해보세요
/pattern2/ { print intact ; print $0 ; next ;}
! /pattern2/ { print new ;}
{ intact=$0 ; $1="p1" ; new=$0 ; }
빈 줄 하나 더
밝혀지다
p1 100 200 300
pattern1 300 400 400
pattern2 300 900 700
p1 300 400 400
답변2
이것이 내가 필요한 것입니다:
/pattern1/ {
if (candidate) {
print "modify:", candidate
}
candidate=$0
next
}
/pattern2/ {
if (candidate) {
print candidate
candidate=0
}
}
{
if (candidate) {
print "modify:", candidate
candidate=0
}
print $0
}
답변3
sed -e '
/pattern1/!b
$q; N
/\npattern2/!s/^/MODIFIED:/
P;D
' yourfile
perl -0777pe 's/(?=pattern1.*$)(?!pattern2)/MODIFIED:/gm' yourfile