使用bash提取文本文件的数量

时间:2018-06-03 18:22:46

标签: string bash shell substring

我有一个带有以下字符串作为输入的变量:

x}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:>12,34 M<.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important} </style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#36c}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}a.gb1,a.gb2,a.gb3,a.gb4{color:#11c !important}body{background:#fff;color:black}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}a.gb1,a.gb4{text-decoration:underline}a.gb3:hover{text-decoration:none}#ghead a.gb2:hover{color:#fff !important}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px}.lsbb{display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;

我们可以找到字符串中的某处:

>12,34 M<

是否可以提取数字12,34并将其放入变量?

我有几个这样的字符串,但模式&gt;数字M&lt;总是一样的。

感谢您的建议:)

2 个答案:

答案 0 :(得分:1)

您可以尝试读取输入变量以使用grep Regex

echo $variable | grep -Eo "[0-9,]{1,} M"   

查看评论:使用<<<避免echo并分配给变量:

finalVar=$(grep -Eo '[0-9,]{1,} M' <<< "$variable") 

答案 1 :(得分:0)

如果每行都有模式,请使用

resultvar=$(sed -r 's/.*>([0-9]+[,]{0,1}[0-9]+ M)<.*/\1/' <<< "$variable") 

如果输入中的行数超过1行且只有一行匹配,请使用

resultvar=$(sed -nr 's/.*>([0-9]+[,]{0,1}[0-9]+ M)<.*/\1/p' <<< "$variable") 

如果您可以有多个匹配项,请指定所需的结果(仅限第一个或最后一个匹配项,数组,一组变量或错误消息)。