파일에서 특정 단어를 추출하는 방법

파일에서 특정 단어를 추출하는 방법

예를 들어 myfile.log라는 이름의 다음과 같은 파일이 있는 경우

1  entry1      # Blah blah 
2  entry2      # Blah blah
3  entry3      # Blah blah
4  entry4      # Blah blah
5  myentry5      # Blah blah
6  myentry6      # Blah blah
7  yourentry7      # Blah blah
8  yourentry8      # Blah blah
9  ourentry9      # Blah blah
10 ourentry10      # Blah blah

출력이 다음과 같도록 "entry"가 포함된 단어만 추출하려면 어떻게 해야 합니까?

entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

다양한 grep, sed, awk 명령을 시도했지만 원하는 것만 얻었습니다. 라인의 모든 것을 출력하거나 항목에 모든 것을 포함하는 대신 항목만 말하는 것으로 나타납니다.

편집 - 파일은 실제로 다음과 같습니다(정리됨). 모든 항목을 추출하려면 RTR을 사용해야 합니다.

10.0.0.1     MYRTR001      # Router in Raleigh
10.0.0.2     MYSW100      # Switch in Raleigh
10.0.0.3     MYRTR002      # Router in Houston
10.0.0.4     MYSW001      # Switch in Houton

답변1

사용sed

$ sed '/entry/s/[^ ]* *\([^ ]*\).*/\1/' input_file
entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

사용awk

awk '/entry/{print $2}' input_file
entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

답변2

일치하는 문자열만 반환하려면 GNU grepiwth 옵션을 사용하세요.-o

grep -o '[^ ]*entry[^ ]*'

entry파일에서의 위치나 앞이나 뒤에 오는 내용에 관계없이 해당 문자열을 포함하는 단어만 인쇄합니다 . 각 줄의 시작 부분에 있는 숫자가 실제로 존재하지 않고 설명 목적으로만 포함하더라도 원하는 결과가 반환됩니다.

산출:

entry1
entry2
entry3
entry4
myentry5
myentry6
yourentry7
yourentry8
ourentry9
ourentry10

답변3

필드 구분 기호가 공백 문자인 경우:

awk -v RS=' ' 'index($0, "entry")' infile

답변4

두 번째 열의 값만 테스트한다고 가정하면 다음과 같이 해야 합니다.

awk '$2 ~ /entry/{print $2}' file

관련 정보