전체 명령줄에서 괄호 안에 나타나는 숫자만 검색해야 합니다.
예를 들어:
$ cat exa.lg
02:57:25 BROKER : Unable to open errno =. (1295)
02:57:25 BROKER 1: Unable to open (45)
02:57:25 BROKER 1: Unable to open 999. (13)
02:57:25 BROKER : Unable to open 1295, (1098)
1295
명령줄( BROKER : Unable to open 1295
) 이 아닌 괄호 안의 오류 번호 정보를 가져와야 합니다.
나는 이것을 시도했습니다 :
cat exa.lg | awk -F '[)(]' '{print $2}' | grep -E '1295|13' exa.lg
02:57:25 BROKER : Unable to open errno =. (1295)
02:57:25 BROKER 1: Unable to open 999. (13)
02:57:25 BROKER : Unable to open 1295, (1098)
1295
하지만 두 개의 숫자(포함된 숫자 )를 얻었습니다 02:57:25 BROKER : Unable to open 1295
.
난 그냥 가져가고 싶어요 02:57:25 BROKER : Unable to open errno =. (1295)
.
어떻게 해야 하나요?
답변1
정규식에 괄호를 포함합니다. 정규식에서 특별한 의미를 갖기 때문에 이스케이프 처리해야 합니다.
grep -E '\((1295|13)\)' exa.lg
답변2
단순한앗해결책:
awk '/\((1295|13)\)/{ print }' exa.lg
산출:
02:57:25 BROKER : Unable to open errno =. (1295)
02:57:25 BROKER 1: Unable to open 999. (13)
/\((1295|13)\)/
- 기록(1295)
이나(13)
기록 내의 내용을 일치시킵니다. ( 로도 표현 가능/(1295)|(13)/
)
답변3
괄호 안에 13
또는 가 포함된 모든 줄을 인쇄한다고 가정합니다 . 1295
그렇다면 다음을 수행할 수 있습니다.
$ grep -E '\(1295|13\)' exa.lg
02:57:25 BROKER : Unable to open errno =. (1295)
02:57:25 BROKER 1: Unable to open 999.
cat
둘 다 파일 이름을 입력으로 사용할 awk
수 있으므로 원래 명령이 필요하지 않습니다 . grep
또한 작업이 awk의 출력이 아닌 파일( )에서 실행되기 때문에 작업이 awk
의미가 없습니다 .grep
grep exa.lg
답변4
cat input | grep ".=" > output
또는
cat input | grep "errno" > output
당신은 할 것:
02:57:25 BROKER : Unable to open errno =. (1295)
그러나 이러한 모든 유형의 행 에 "errno" 또는 "=" 와 같은 고유 식별자가 있는지 확인해야 합니다(즉, 다른 행에는 이러한 단어/기호가 없음) .