繁体   English   中英

需要帮助阅读grep / sed / regex语句

[英]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 我假设您了解什么管道| 是做。

grep的

man grep帮助我们解析grep的参数:

  • -m 1 :在1条匹配的行之后停止读取文件
  • -o :仅打印匹配行的匹配(非空)部分
  • -P :将正则表达式解释为Perl正则表达式

Grep正则表达式

'"uImage-[0123456789.]*-ts-armv7l": [^, }]*'

匹配"key": value

  1. "uImage- :从字面上看
  2. [0123456789.]* :零个或多个数字或点
  3. -ts-armv7l": ::从字面上看
  4. [^, }]* :零个或多个不是,字符 }

'"uImage-[0123456789.]*-ts-armv7l.*?\btype\b"'

匹配“带引号”的字符串

  1. "uImage- :从字面上看
  2. [0123456789.]* :零个或多个数字或点
  3. -ts-armv7l :从字面上看
  4. .*? 懒惰地匹配零个或多个非换行符
  5. \\btype\\b" :使用单词边界匹配单词“ type”

cut -f3 -d ' '

man cut

  • -f3 :返回第三个字段
  • -d ' ' :在单个空格上分割

因此,此cut命令将字符串分割为空格并返回第3部分。

sed命令

sed 's/^.*: //'

用最右端的':'替换行首之间的所有非换行符。 假设grep给我们留下了"key": value行,其中value不包含':'(由于grep而无法实现),我们剩下了value

sed 's/,//'

替换第一个,什么也没有在字符串中找到。

注意

这些命令有许多怪癖和改进的机会,但是我没有将它们包含在答案的主体中,因为问题是“这是做什么的?”。 我最重要的建议是使用jq解析Json。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM