파일의 여러 줄에서 "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