aa.text
Linux 시스템에 다음 줄이 포함된 파일이 있습니다 .
$ cat aa.text
I am a user
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [PCRMR2S]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:52 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:54 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:54 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:55 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:58:03 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
username is valid
Fri Feb 09 23:58:04 2024
다음 출력을 얻고 싶습니다.
i am a user
username is valid
Fri Feb 09 23:58:04 2024
나는 시도했다:
sed -e '/ORA-1653/,+1 d' aa
이것은 나에게 다음을 제공합니다:
i am a user
Fri Feb 09 23:57:51 2024
Fri Feb 09 23:57:51 2024
Fri Feb 09 23:57:51 2024
Fri Feb 09 23:57:52 2024
Fri Feb 09 23:57:54 2024
Fri Feb 09 23:57:55 2024
Fri Feb 09 23:57:56 2024
username is valid
Fri Feb 09 23:58:04 2024
하지만 난 필요해
i am a user
username is valid
Fri Feb 09 23:58:04 2024
어떻게 해야 하나요?
요구 사항은 끝(라인)에 타임스탬프를 인쇄하는 것만이 아닙니다. 요구 사항은 일치하는 단어가 발견되고(예: ORA-1653
) 다음 다음 줄이 타임스탬프인 경우 이 두 행이 삭제되지만, 일치하는 단어가 없고 다음 다음 줄이 타임스탬프인 경우 타임스탬프는 다음과 같습니다. 삭제되지 않습니다.
답변1
그러면 제공한 입력을 기반으로 기대하는 출력이 생성됩니다.
$ head -n 1 file; tail -n 2 file
I am a user
username is valid
Fri Feb 09 23:58:04 2024
이것이 필요한 전부가 아닌 경우 질문을 편집하여 출력할 3개 행을 선택해야 하는 요구 사항을 알려주십시오.
답변2
-v
열쇠를 사용할 수 있습니다 grep
. 이 옵션이 없으면 grep
패턴이 있는 라인이 인쇄되고, 옵션이 -v
있으면 grep
패턴이 없는 라인이 인쇄됩니다.
무시할 행 유형이 두 가지이므로 grep
검색하려면 두 가지 모드가 필요합니다. 로 표시하십시오 -e
.
따라서 다음을 시도해 볼 수 있습니다.
grep -v -e "ORA-1653" -e "Fri Feb" aa.text
답변3
가정:
- 3가지 다른 라인 형식이 있습니다...
- 형식 #1: 줄은 다음으로 시작됩니다.
ORA
- 형식 #2:행에 날짜/타임스탬프 형식이 포함됩니다.
Day Mon dd hh:mm:ss yyyy
- 형식 #3: 일치하지 않는 것형식 #1또는형식 #2
- 목표는 ...
- 무시하다형식 #1
- 마지막 줄을 인쇄하다형식 #2
- 모든 항목을 인쇄형식 #3
아이디어 awk
:
awk '
BEGIN { regex = "[0-2][0-9]:[0-5][0-9]:[0-5][0-9]" } # hh:mm:ss
/^ORA/ { next } # format #1
NF==5 &&
$4~regex { last_dt = $0 ; next } # format #2
1 # format #3 (ie, everything else)
END { print last_dt }
' aa.txt
그러면 다음이 생성됩니다.
I am a user
username is valid
Fri Feb 09 23:58:04 2024
답변4
사용행복하다(이전 Perl_6)
~$ raku -e 'my @day-of-week = <Sun Mon Tue Wed Thu Fri Sat>; \
for slurp() {
put S:g/ ^^ ORA \- 1653 \: \h .+? $$ [\n ^^ @day-of-week .+? $$]? \n //
}; file
#또는
~$ raku -e 'my @day-of-week = <Sun Mon Tue Wed Thu Fri Sat>; \
S:g/^^ ORA \- 1653 \: \h .+? $$ [\n ^^ @day-of-week .+? $$]? \n //.put for slurp;' file
위 내용은 Perl 계열의 프로그래밍 언어인 Raku로 작성된 답변입니다. 파일이 slurp
편집되고(메모리로 한 번 읽혀짐) 두 개의 대상 행이 S///
Raku의 "big-S" 대체 연산자의 인식 도메인에 설명됩니다(명명된 인수를 사용하여 전역화됨 S:g///
). 두 번째 줄은 [\n ^^ Fri .+? $$]?
열거자에 대한 선택 사항입니다 ?
. 교체된 절반에는 아무것도 없어 인식된 텍스트 시퀀스가 제거됩니다.
입력 예:
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [PCRMR2S]
I am a user
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [PCRMR2S]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:51 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:52 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:54 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:54 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:55 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:57:56 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
Fri Feb 09 23:58:03 2024
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
ORA-1653: unable to extend table SYS.AUD$ by 128 in tablespace SYSTEM [ABCD]
username is valid
Fri Feb 09 23:58:04 2024
예제 출력:
I am a user
username is valid
Fri Feb 09 23:58:04 2024
\n
위의 "예제 출력" 끝에 개행 문자가 삽입된 것 같습니다. 이것이 문제라면 .trim-trailing
과 final 사이에 루틴 호출을 삽입하여 해결할 수 있습니다.S:g///
.put
slurp
위의 방법은 파일에 대한 메모리가 한 번에 있는 경우에 작동합니다. 크기가 문제인 경우 아래 답변은 input_file을 한 줄씩 읽습니다. 라쿠를 사용한다3위안연산자(Perl과 철자가 약간 다름):시험 ??
진짜 !!
잘못된.
~$ raku -e 'my @day-of-week = <Sun Mon Tue Wed Thu Fri Sat>; my $flag = 0; \
for lines() { / ^ ORA \- 1653 \: \h .+ $ / \
?? ( $flag=1 andthen next ) \
!! ( $flag == 1 and / ^ @day-of-week .+ $ /) \
?? ( $flag=0 andthen next ) \
!! ( .put andthen $flag=0 ) };' file
I am a user
username is valid
Fri Feb 09 23:58:04 2024
https://docs.raku.org/routine/slurp
https://docs.raku.org/언어/regexes#S///_non-breaking_substitution
https://docs.raku.org/언어/operators#infix_??_!!
https://raku.org