我在shell脚本中是一个非常新的unix所以我假设我需要有关以下问题的帮助:
我想将一个动态变化的日志文本字符串存储到变量中。例如,当您运行创建此日志的程序时,此字符串可能是 server1 ,下次 server238 。我已经找到了通过sed或grep和cut找到第一次出现这个字符串的方法。但是,由于此软件创建的日志文件可能因版本而异,因此我不能指望包含此字符串的特定行。 E.x一个版本可能会记录“您正在使用的服务器是server98”,下一个版本可以记录“使用的服务器是server98”。有没有办法通过sed或awk可以检索此字符串,无论日志布局如何。 提前致谢。
答案 0 :(得分:2)
我选择:
server=$(grep -Eo 'server[0-9]+' file | head -n 1)
查找单词server
后面出现的任何数字,例如server3,server98
-E
表示使用扩展正则表达式(即多个数字的\ d +)
-o
表示只输出字符串的匹配部分 - 而不是输出包含它的整行。
这是OSX的行动:
cat file
server9
fred server98 fred
3
/usr/bin/grep -Eo 'server[0-9]+' file
server9
server98
答案 1 :(得分:0)
试试这个:
MY_VAR="$(sed -n 's/^.*\(server[0-9][0-9]*\).*$/\1/p' my_file.log | sort -u)"