Unix命令来解析字符串

Unix命令来解析字符串,unix,awk,sed,grep,Unix,Awk,Sed,Grep,我试图找出一个命令来解析以下文件内容: Operation=GET Type=HOME Counters=CacheHit=0,Exception=1,Validated=0 我需要将Exception=1提取到它自己的行中。我在摆弄awk、sed和grep,但没有取得多大进展。有人对使用任何unix命令执行此操作有任何提示吗 谢谢你有很多方法可以做到这一点。这里有一个假设文件名为“file.txt”。抓取所需的行,用Except替换从行首到Except的所有内容,然后使用逗号作为分隔符拉出第

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

Operation=GET
Type=HOME
Counters=CacheHit=0,Exception=1,Validated=0
我需要将
Exception=1
提取到它自己的行中。我在摆弄awk、sed和grep,但没有取得多大进展。有人对使用任何unix命令执行此操作有任何提示吗


谢谢你有很多方法可以做到这一点。这里有一个假设文件名为“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
或者正如@shelter提醒我的那样:

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

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

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

source无需混合使用命令

awk -F, 'NR==2 {print RS$1}' RS="Exception"  file
Exception=1
在这里,我们按查找的关键字将行拆分为
RS=“Exception”

如果该行有两条记录(仅当找到关键字时),则
使用记录选择器打印第一个字段,使用命令分隔


PS这仅在您有一个
异常
字段时有效

请编辑您的Q以显示您解决问题的最佳尝试。检查
man grep
,查看您的
grep
是否包含
-o
选项。祝你好运,这没什么意义。如果要在一行上显示“异常=1”,请编写
echo Exception=1
。您正在尝试获取逗号分隔行的第二列吗?是否要从具有2个逗号的所有行中获取值?或者,您是否正在查找格式为
*=1
的任何字符串?或者您正在查找任何形式为
Exception=X
的字符串吗?或者您是在寻找“已验证”之前的子句?或者您正在查找“CacheHit=0”之后的字符串?或者你完全关心别的事情。您需要描述如何过滤数据。您应该使用单命令解决方案。很少需要混合grep、sed和awk。同时引用grep表达式
egrep-o“Exception=[0-9]+”文件
无法通过引用问题(或者在需要时使用两个cmd)来更新答案。继续发帖,祝你好运。;-)我是这样做的。然后,只需将echo更改为任何字段名即可获得值。