[英]Need help reading a grep/sed/regex statement
有人可以请以下声明:
kernelHash=$(grep -m 1 -o '"uImage-[0123456789.]*-ts-armv7l": [^, }]*' $SecureBootJson | sed 's/^.*: //')
kernelHash=$(grep -oP '"uImage-[0123456789.]*-ts-armv7l.*?\btype\b"' $SecureBootJson | cut -f3 -d ' ' | sed 's/,//')
并为我分解它们,并解释它们应该完成什么?
两者都设置变量kernelHash
基于其名称/路径存储在变量中的文件的价值$SecureBootJson
。 我假设您了解什么管道|
是做。
man grep
帮助我们解析grep的参数:
-m 1
:在1条匹配的行之后停止读取文件 -o
:仅打印匹配行的匹配(非空)部分 -P
:将正则表达式解释为Perl正则表达式 '"uImage-[0123456789.]*-ts-armv7l": [^, }]*'
匹配"key": value
对
"uImage-
:从字面上看 [0123456789.]*
:零个或多个数字或点 -ts-armv7l":
::从字面上看 [^, }]*
:零个或多个不是,
字符
或}
和
'"uImage-[0123456789.]*-ts-armv7l.*?\btype\b"'
匹配“带引号”的字符串
"uImage-
:从字面上看 [0123456789.]*
:零个或多个数字或点 -ts-armv7l
:从字面上看 .*?
: 懒惰地匹配零个或多个非换行符 \\btype\\b"
:使用单词边界匹配单词“ type” cut -f3 -d ' '
从man cut
:
-f3
:返回第三个字段 -d ' '
:在单个空格上分割 因此,此cut命令将字符串分割为空格并返回第3部分。
sed 's/^.*: //'
用最右端的':'替换行首之间的所有非换行符。 假设grep
给我们留下了"key": value
行,其中value
不包含':'(由于grep而无法实现),我们剩下了value
。
sed 's/,//'
替换第一个,
什么也没有在字符串中找到。
这些命令有许多怪癖和改进的机会,但是我没有将它们包含在答案的主体中,因为问题是“这是做什么的?”。 我最重要的建议是使用jq
解析Json。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.