![](/img/trans.png)
[英]How to get logs of individual argument passed to shell script from a file
[英]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.