我有一个长变量,当我使用| grep rc
时,我将使用grep搜索然后输出bash $ crf的同一行
我要搜索rc =将=之后的值设置为变量
crf="cabac=1 / ref=5 / deblock=1:-3:-3 / analyse=0x3:0x113 / me=umh / subme=7 / psy=1 / psy_rd=1.00:0.15 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-3 / threads=16 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=24 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=19.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00"
rc=$(echo $crf |grep rc=)
输出与输入$ crf相同
答案 0 :(得分:0)
您不应使用grep
。命令grep将在每一行中搜索匹配项,如果找到,将打印该行。由于您的代码是单行字符串,因此它将始终打印整行。
相反,您可以使用awk
除以rc=
,然后使用cut
仅保留值:
rc=$(awk -F'rc=' '{ print $2 }' <<< $crf | cut -d' ' -f1)
部分说明:
awk -F'rc=' '{ print $2 }' <<< $crf
用分隔符crf
分隔字符串rc=
并显示第二个子字符串。该部分将从分配给rc=
| cut -d' ' -f1
会将上面的子字符串按空格(
)分割,并仅保留第一个元素,即您要查找的值。答案 1 :(得分:0)
每当我的数据中有标签名=值对时,我发现最好首先创建一个将标签名转换为值的数组(下面的f[]
),然后我可以按名称访问值,例如:
$ crf='cabac=1 / ref=5 / deblock=1:-3:-3 / analyse=0x3:0x113 / me=umh / subme=7 / psy=1 / psy_rd=1.00:0.15 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-3 / threads=16 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=24 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=19.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00'
$ echo "$crf" | awk -v tag='rc' -F' / |=' '{for (i=1; i<=NF; i+=2) f[$i]=$(i+1); print f[tag]}'
crf
$ echo "$crf" | awk -v tag='ip_ratio' -F' / |=' '{for (i=1; i<=NF; i+=2) f[$i]=$(i+1); print f[tag]}'
1.40
$ rc=$(echo "$crf" | awk -v tag='rc' -F' / |=' '{for (i=1; i<=NF; i+=2) f[$i]=$(i+1); print f[tag]}') $ echo "$rc"
crf