거의 똑같은 질문이네요패턴에 따라 파일을 두 부분으로 분할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
그 밖의 모든 것이 생성됩니다 .f2
XYZ
또는,수락된 답변귀하가 연결한 질문에 따르면 이미 귀하의 요구 사항을 충족합니다. XYZ
첫 번째 파일에만 남아 있습니다 . 두 번째 명령에서 사용하려면 두 awk
명령을 반대로 하면 됩니다.
awk '/XYZ/{out="file2"}{print >out}; ' out=file1 file
답변2
기타 변형(밴드 sed
)
sed '/XYZ/,${
w file2
d
}' file >file1