고급 sed 인쇄 + 교체 [중복]

고급 sed 인쇄 + 교체 [중복]

아래 게시된 솔루션에 대한 더 우아한 솔루션이 있는지 여부에 관심이 있습니다.

[]$ find ./abc -type f -exec sed -n 's/test/best/pg' {} + ; find ./abc -type f -exec sed -i 's/test/best/g' {} +

첫 번째 find sed명령은 발견된 모든 패턴을 콘솔에 인쇄합니다. 두 번째 find sed명령은 실제로 파일의 패턴을 대체합니다.

내가 겪은 문제:

  1. sed -n -i(여러 개의 명령줄 수정자/매개변수를 가질 수 없음) -? 확인하신 분 계신가요?

  2. sed교체하기 전에 결과를 인쇄할 로컬 수정자가 없습니다. - ? 해결책을 찾을 수 없습니다. 솔루션이 존재하고 명령이 수정될 수 있습니다(즉, 다음은 아무것도 출력하지 않고 뒤에서 대체됩니다!).

    find ./abc -type f -exec sed -i 's/test/best/pg' {} +  
    

답변1

글쎄요, 두 개를 따로 가질 필요는 없어요find주문하다:

find abc -type f -exec sed -n 's/test/best/pg' {} + -exec sed -i 's/test/best/g' {} +

./...그리고 이전 버전은 필요하지 않습니다 abc.

답변2

GNU를 사용한다면/무엇이든 사용할 수 있습니다

find abc -type f -exec sed -i 's/test/best/gw /dev/fd/2' {} +

그러나 텍스트에서 교체하기 전에 결과를 인쇄하고 싶다고 언급했지만 "결과"가 무엇을 의미하는지 확실하지 않지만

find abc -type f -exec sed -i '/test/w /dev/fd/2
                               s//best/g' {} +

바꾸기 전에 변경될 줄을 인쇄합니다.

관련 정보