Bash에서 특정 단어를 grep하는 방법

Bash에서 특정 단어를 grep하는 방법

파일의 여러 줄에서 "on" 다음에 나오는 단어를 캡처하고 싶습니다. 해당 단어가 이미 파일에 있으면 건너뛰고 싶습니다. 나는 이것을 시도한다:

#!/bin/bash
echo "" > missig_packages.txt
cat log_file.txt | grep depends > dependsLog.txt
function createListOfPackages {
    if grep "$1" missig_packages.txt; then
        continue
    else
        echo "$1" >> missig_packages.txt
    fi  
}
while read line; do
    package=`cat dependsLog.txt | cut -d" " -f5`
    createListOfPackages $package
done < dependsLog.txt

dependencyLog.txt 파일에는 다음 줄이 포함되어 있습니다.

  libgcc1:amd64 depends on **gcc-4.9-base** (= 4.9.1-0ubuntu1); however:
  cinder-volume depends on **cinder-common** (= 1:2015.1.1-0ubuntu2~cloud2); 
  python-cryptography depends on **python-cffi**.
  python-pycadf depends on **python-netaddr**.

grep(텍스트 자체에는 없는) 와 사이의 단어를 어떻게 찾을 수 있나요 ? 각 줄은 " "로 시작됩니다.****

답변1

이것이 awk의 일이다.

그리고 온라인에 접속해

awk '$3 == "on" '

당신이 찾고 있는 단어

awk '$3 == "on" { print $4 ;}'
  • $3 == "on"세 번째 단어 "on"이 포함된 행을 가져옵니다.
  • { print $4 ;}네 번째 단어를 인쇄합니다

답변2

전체 쉘 스크립트 조각은 다음으로 대체될 수 있습니다.

awk '/depends on/ { print $4}' log_file.txt | sed -e 's/\.$//' | sort -u > missing_packages.txt

.sed 스크립트는 버전 정보가 없는 입력 줄에서 패키지 이름의 꼬리를 제거합니다.

답변3

dependentLogs.txt에서 "on" 다음에 나오는 단어를 찾아 줄 시작 부분에 ""를 삽입하는 다음 명령을 시도해 보십시오.

cat dependsLog.txt | grep -oP "(?<=on )[^ ]+" | sed 's/^/\"\"/' >> missig_packages.txt

행이 중복되지 않도록 하려면 다음 명령을 통해 정렬하고 고유할 수 있습니다.

cat dependsLog.txt | grep -oP "(?<=on )[^ ]+" | sed 's/^/\"\"/' | sort | uniq >> missig_packages.txt

관련 정보