Unix命令解析字符串

时间:2019-06-29 03:06:01

标签: unix awk sed grep

我正试图找出一个命令来解析以下文件内容:

Operation=GET
Type=HOME
Counters=CacheHit=0,Exception=1,Validated=0

我需要将Exception=1提取到自己的行中。我对awk,sed和grep不满意,但进展不大。有没有人对使用任何Unix命令执行此操作有任何提示?

谢谢

3 个答案:

答案 0 :(得分:2)

由于您的文件接近bash语法,因此您可以执行一个有趣的小技巧,使bash本身解析文件。首先,使用诸如tr之类的程序将输入转换为bash可以解析的内容,然后“来源”该内容,这将创建shell变量,稍后可以扩展以获取值。

source <(tr , $'\n' < file_name_goes_here)
echo $Exception

答案 1 :(得分:0)

许多方法可以做到这一点。这是一个假定文件名为“ file.txt”的文件。抓取所需的行,用Except替换从行首到Except的所有内容,然后使用逗号作为分隔符来提取第一个字段。

$ grep Exception file.txt | sed 's/.*Except/Except/g' | cut -d, -f 1
Exception=1

如果您想使用gawk:

$ grep Exception file.txt | sed 's/.*Except/Except/g' | gawk -F, '{print $1}'
Exception=1

或仅使用grep和sed:

$ grep Exception file.txt | sed 's/.*\(Exception=[0-9]*\).*/\1/g'
Exception=1

或@sheltter提醒我:

$ egrep -o "Exception=[0-9]+" file.txt
Exception=1

答案 2 :(得分:0)

无需混合使用命令。

awk -F, 'NR==2 {print RS$1}' RS="Exception"  file
Exception=1

在这里,我们通过寻找RS="Exception"的关键字来分隔行
如果该行有两个记录(仅当找到关键字时),则
使用“记录”选择器打印第一个字段,并使用命令分隔。

PS仅在您有一个Exception字段时才有效