在文件中weather.xml
,有字符串temp="103"
。我运行此命令
grep -o "temp=\"[^\"]*\"" ~/.cache/weather.xml
输出是103
。
这是什么[^\"]
意思?
谢谢
答案1
在正则表达式中,[...]
表示要匹配的字符范围,并且(在该上下文中)^
表示否定。 So[^\"]
表示除文字双引号之外的任何字符。 So"[^"]*"
表示双引号,后跟除双引号之外的零个或多个字符序列,后跟结束双引号。
请注意,反斜杠转义只是因为您在表达式周围使用了双引号 - 您可以将其简化为
grep -o 'temp="[^"]*"' ~/.cache/weather.xml
如果您希望它仅输出数字温度读数,则可以使用与 Perl 兼容的 RE
grep -Po 'temp="\K[^"]*'
答案2
这意味着——跳过双引号的出现。
grep -o -> 仅显示与 PATTERN 匹配的匹配行的部分。
* -> 这意味着 0 个或更多,因此得到 103
\" -> temp="103" 中的最后一个双引号