패턴 전에 온라인으로 파일을 두 부분으로 분할

패턴 전에 온라인으로 파일을 두 부분으로 분할

거의 똑같은 질문이네요패턴에 따라 파일을 두 부분으로 분할file1하지만 이 예에서는 행을 XYZ로 설정하지 마세요 file.txt.

ABC
EFG
XYZ
HIJ
KNL

XYZ를 포함하고 싶습니다 file2(그러나 XYZ여전히 분할 모드임). 내가 지금 가지고 있는 것은 다음 답변을 사용하는 것입니다.https://unix.stackexchange.com/a/202516/108861그런 다음 마지막 행을 file1맨 위에 추가 file2하고 제거합니다 file1. 하지만 더 쉬운 단일 행 솔루션이 있습니까?

답변1

수정이 매우 쉽습니다.내 솔루션또 다른 질문입니다. 그냥 제거하세요 next:

perl -ne 'if(/XYZ/){$a=1} ; $a==1 ? print STDERR : print STDOUT;' file >f1 2>f2;

그러면 를 포함한 f1모든 것과 XYZ그 밖의 모든 것이 생성됩니다 .f2XYZ


또는,수락된 답변귀하가 연결한 질문에 따르면 이미 귀하의 요구 사항을 충족합니다. XYZ첫 번째 파일에만 남아 있습니다 . 두 번째 명령에서 사용하려면 두 awk명령을 반대로 하면 됩니다.

awk '/XYZ/{out="file2"}{print >out}; ' out=file1 file

답변2

기타 변형(밴드 sed)

sed '/XYZ/,${
             w file2
             d
            }' file >file1

관련 정보