我正在尝试制作一个 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]}
如果您的要求只是归结为从多组文件中获取单个字符串值,则只需使用grep
orAwk
作为
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