如何在 bash 中查找文件中的文本并回显输出并将其添加到变量中

如何在 bash 中查找文件中的文本并回显输出并将其添加到变量中

我正在尝试制作一个 bash 脚本,需要http://0.0.0.0:3468/*在一堆日志中查找/opt/plex/*.log,将其显示在用户的终端上,同时将其添加到变量中。

我怎样才能做到这一点?

示例:打印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]}


如果您的要求只是归结为从多组文件中获取单个字符串值,则只需使用greporAwk作为

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

相关内容