sed: 검색 내에서 검색

sed: 검색 내에서 검색

모두:

sed를 사용하여 두 가지 기준으로 행을 필터링하려면 어떻게 해야 합니까?

aptitude -v show '?name(grep)' | egrep --color=always "^|grep" | sed 's/^\(Package: .*\)$/\x1b[33;1m\1\x1b[0m/'

위에서 내가 원하는 것은 먼저 grep을 사용하여 검색 문자열(이 경우 "grep")과 일치하는 항목에 색상을 지정한 다음 적성 출력의 모든 "Package: ..." 헤더 행을 grep하는 것입니다. 노란색으로 표시됩니다. . 그러나 이전에 egrep... 명령을 통해 "Package:..." 줄에 빨간색이 추가된 경우 해당 줄은 노란색으로 시작하고 발견된 "grep" 문자열에 대해 빨간색으로 변환된 다음 발견되면 빨간색으로 되돌아갑니다. '\e[0m' 은 예상한 대로 일반 색상으로 변경됩니다.

따라서 제가 해야 할 일은 "Package:..." 줄을 찾아서 해당 줄에서 가능한 색상 코드를 제거하고 전체 줄을 노란색으로 칠하는 것입니다.

sed "s,\x1B\[[0-9;]*[a-zA-Z],,g"

... 코드가 제거되지만 "Package: ...."로 시작하는 줄에서만 실행하면 됩니다. 주문은 무엇입니까? 아니면 이 작업을 수행하는 더 우아한 방법이 있을까요?

답변1

man sed당신에게 말할 것입니다 :

Sed commands can be given with ... one address, in which case the
command will only be executed for input lines which match that address;
...
/regexp/
          Match lines matching the regular expression regexp.

그래서 당신은 이것을 할 수 있습니다 :

sed '/Package/ s/replace/stuff/'

관련 정보