簡體   English   中英

如何搜索在 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 $1 | tr a-z A-Z
g=${1^^}
echo $g
echo $1
val=$(awk -F= -v s="$g" '$g ~ s{print $2}' /medaff/Scripts/Aggrify/sltconfig.cfg)
echo "TASK ID is $val"

假設你的匹配條件是分隔符_之后的第一個字符串,需要的output是=字符之后的數字,那么你可以試試這個sed

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

如果我沒看錯的話,有 2 個快速版本 -

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

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

兩者的邏輯基本相同。

在純 bash -

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

但這效率要低得多。

如果您確定只會命中一次,那么所有這些都可以通過短路退出來稍微改善,但對於如此小的樣本,這根本無關緊要。 如果您有更大的數據集要閱讀,那么我強烈建議您將規范形式化,而不是“在這個集合中我應該得到……”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM