Mac OS X에서 한 파일의 텍스트를 다른 파일로 인쇄

Mac OS X에서 한 파일의 텍스트를 다른 파일로 인쇄

다음 스크립트는 newfile.txt라는 다른 파일에서 "Word1 word2" 패턴이 처음 발생한 후 file1.txt의 텍스트를 인쇄하는 방법을 살펴봅니다.

sed -n -e 's/^.*Word1 word2/\1/p' file1.txt > newfile.txt

터미널에 이것을 입력하면 아무 일도 일어나지 않습니다(오류 메시지도 나타나지 않습니다). 저는 Mac OS X에서 UNIX를 사용하고 있습니다.

답변1

주문하다

sed -n -e 's/^.*Word1 word2/\1/p' file1.txt

대체 명령의 오른쪽에는 역참조가 포함되어 있지만 왼쪽에는 캡처 그룹이 없기 때문에 잘 정의되어 있지 않습니다. Linux의 GNU sed 4.7에서는 "'s' 명령의 RHS에 대한 잘못된 참조 \1"이라는 오류 메시지가 표시됩니다.

"Word1 word2"가 처음 발생한 후에 텍스트를 인쇄해야 하기 때문에 욕심이 많아 사용할 수 .*Word1 word2없습니다 .*. 대신 첫 번째 문자를 Word1 word2단일 문자로 변환한 다음 해당 문자까지 삭제하는 트릭을 사용하겠습니다 . 사용하지 않는 문자라면 모두 가능하지만 sed가 각 줄을 읽을 때 줄바꿈을 제거하고 줄을 인쇄할 때 줄바꿈을 추가하므로 줄바꿈을 사용하는 것이 좋습니다. 그래서 우리는

sed -n -e 's/Word1 word2/\n/;s/^.*\n//p' file1.txt > newfile.txt

"Word1 word2"가 필요한 경우 다음을 사용하십시오.

sed -n -e 's/Word1 word2/\n&/;s/^.*\n//p' file1.txt > newfile.txt

관련 정보