다음 스크립트는 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