如何搜索在 shell 脚本中作为参数传递的文件中的完整字符串?

How to search the full string in file which is passed as argument in shell script?

我正在传递一个参数,我必须在文件中匹配该参数并提取信息。请问我怎么才能得到它?

示例:

我在文件中有以下详细信息-

iMedical_Refined_load_Procs_task_id=970113
HV_Rawlayer_Execution_Process=988835
iMedical_HV_Refined_Load=988836
DHS_RawLayer_Execution_Process=988833
iMedical_DHS_Refined_Load=988834

如果我将 'hv' 作为参数传递,那么它应该选择 'iMedical_HV_Refined_Load' 并给出结果 - '988836'

如果我通过 'dhs' 那么它应该选择 - 'iMedical_DHS_Refined_Load' 并给出结果 = '988834'

我尝试了以下逻辑,但没有正确给出结果。我需要做哪些改变-

echo  | tr a-z A-Z
g=${1^^}
echo $g
echo 
val=$(awk -F= -v s="$g" '$g ~ s{print }' /medaff/Scripts/Aggrify/sltconfig.cfg)
echo "TASK ID is $val"

假设您的匹配条件是分隔符 _ 之后的第一个字符串,并且需要的输出是 = 字符之后的数字,那么您可以试试这个 sed

$ sed -n "/_/I{s/[^=]*=\(.*\)//p}" input_file
$ read -r input
hv
$ sed -n "/_$input/I{s/[^=]*=\(.*\)//p}" input_file
988836
$ read -r input
dhs
$ sed -n "/_$input/I{s/[^=]*=\(.*\)//p}" input_file
988834

如果我没看错,2 个快速版本 -

$: cat 1
awk -F= -v s="_${1^^}_" '~s{print }' file

$: cat 2
sed -En "/_${1^^}_/{s/^.*=//;p;}" file

二者逻辑基本相同

纯bash-

$: cat 3
while IFS='=' read key val; do [[ "$key" =~ "_${1^^}_" ]] && echo "$val"; done < file

不过效率要低得多。

如果你确定只有一次命中,所有这些都可以通过 short-circuit 退出来改善一点,但在这么小的样本上根本无关紧要。如果您有更大的数据集要阅读,那么我强烈建议您将规范形式化,而不是“在这个集合中我应该得到...”。