아래 게시된 솔루션에 대한 더 우아한 솔루션이 있는지 여부에 관심이 있습니다.
[]$ 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
명령은 실제로 파일의 패턴을 대체합니다.
내가 겪은 문제:
sed -n -i
(여러 개의 명령줄 수정자/매개변수를 가질 수 없음) -? 확인하신 분 계신가요?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' {} +
바꾸기 전에 변경될 줄을 인쇄합니다.