Bash에서 파일의 텍스트를 찾고 출력을 에코하여 변수에 추가하는 방법

Bash에서 파일의 텍스트를 찾고 출력을 에코하여 변수에 추가하는 방법

http://0.0.0.0:3468/*나는 많은 로그를 살펴보고 /opt/plex/*.log이를 사용자 터미널에 표시하고 변수에 추가해야 하는 bash 스크립트를 만들려고 합니다 .

어떻게 해야 하나요?

예: http://0.0.0.0:3468/abc터미널에 인쇄하고 스크립트에 이름이 지정된 변수를 만듭니다 TOKEN=abc.

답변1

기반으로~해야 한다의견에서 요청한대로 아래와 같은 것이 필요합니다.

#!/usr/bin/env bash

token=()
while IFS= read -r line; do
    printf '%s\n' "$line"
    token+=( "${line##*/}" )
done< <(awk '$0 ~ "http://0.0.0.0:3468/"' /opt/plex/*.log)

그러면 URL이 포함된 일치하는 모든 줄이 콘솔에 인쇄됩니다. 변수를 사용하여 토큰 출력을 저장하는 대신, 배열을 사용하여 형식의 인수 확장 구문을 사용하여 내용을 추가할 수 있습니다. 그러면 bash마지막 항목까지 문자열을 제거하고 나머지 문자열을 인쇄합니다. 따라서 스크립트가 완료되면 토큰 목록을 인쇄할 수 있습니다./${word##*}/

printf '%s\n' "${token[@]}"

배열을 반복하여 개별 토큰에 액세스합니다.

for ((i=0; i< ${#token[@]}; i++ )); do 
    printf '%s\n' "${token[i]}"
done

(또는) 배열 인덱싱 ${token[0]}등을 사용하십시오.${token[1]}


요구 사항이 여러 파일 세트에서 단일 문자열 값을 얻는 것으로 요약되는 경우 grep또는 Awkas를 사용하십시오.

token=$(awk -vFS=/ '$0 ~ "http://0.0.0.0:3468/"{print $NF}' /opt/plex_autoscan/*.log)

(또는) 다음과 GNU grep같이

token=$(grep -oP 'http://0.0.0.0:3468/\K.*) /opt/plex_autoscan/*.log

관련 정보