我有以下bash腳本段,它使用grep來確定輸入行是否包含特定的模式。如何確定字符串是否包含帶awk的子字符串
echo $input_line | grep -q "$pattern"
if [ $? -eq 0 ];
then
# Input line contains pattern
# Execute some bash commands
else
# Input line DOES NOT contain pattern
# Execute other bash commands
fi
我需要用awk重寫而不使用grep。我嘗試了幾種變體,但它們都不起作用,例如,無論是否包含輸入線模式,以下兩種都始終打印MATCH, 。
echo $input_line | awk -v b="$pattern" '/pattern/ { print "MATCH" }'
echo $input_line | awk -v b="$pattern" '/$0 ~ pattern/ { print "MATCH" }'
更新:
拆卸/建議解決所描述的問題。現在我遇到了awk命令在if語句中返回結果的問題。我寫了下面的「醜陋」的片段:
pattern="abc"
input_line="xyz123 678q we uqa abc asd"
RES=$(echo $input_line | awk -v pat="$pattern" '$0 ~ pat { print "1" }')
if [ $RES -eq 1 ];
then
echo Input line $input_line contains pattern $pattern
else
echo Input line $input_line DOES NOT contains pattern $pattern
fi
input_line="tult uil7665 5444tu l098 7tu"
RES=$(echo $input_line | awk -v pat="$pattern" '$0 ~ pat { print "1" }')
if [ $RES -eq 1 ];
then
echo Input line $input_line contains pattern $pattern
else
echo Input line $input_line DOES NOT contains pattern $pattern
fi
所以我有下面的輸出,因爲在第二種情況下,當輸入行不包含模式變量RES未設置:
Input line xyz123 678q we uqa abc asd contains pattern abc
./test.sh: line 21: [: -eq: unary operator expected
Input line tult uil7665 5444tu l098 7tu DOES NOT contains pattern abc
任何想法如何改善這個「醜陋的」腳本與if語句片段?
感謝
只需拿出最後一次嘗試的'/''$ 0〜pattern {print ...' –
當您編輯該問題時,還請包含示例輸入和輸出以幫助顯示「不工作」意思是 –