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

関連情報