Bash
awk 或 Sed:如果找到模式:刪除行 && 導出變數
在我的 bashscript 中,我希望 Sed
debug: Debug
在文件中找到${SourceP}
,如果找到,則刪除該行並導出到環境Debug=Debug
sed -i '/debug: Debug/,+0 d' ${SourceP} && export Debug=Debug
但不幸的
Debug=Debug
是,即使沒有找到模式,它也會被導出。我怎樣才能做到這一點:
Debug=Debug
僅在找到模式並刪除該行時才導出。用sed不能實現嗎?
我試過這個,
awk
但這也不起作用:awk -i inplace '!/debug: Debug/' ${SourceP} && export Debug=Debug
編輯:我希望
debug: Debug
準確搜尋。
awk
您需要以某種方式從零件中導出資訊。您可以導出變數,也可以使用退出狀態。awk -i inplace 'BEGIN {err = 1}; {if (NR == 1 && /([[:space:]]|^)debug: Debug([[:space:]]|$)/) {err = 0} else {print}}; END {exit err}' ${SourceP} && export Debug=Debug
解釋
BEGIN {err = 1}
:最初,將錯誤狀態設置為 1。- 然後,如果您在第一行
NR == 1
並且該行&&
有/([[:space:]]|^)debug: Debug([[:space:]]|$)/
,請將錯誤狀態設置為 0 (err = 0
)。否則,列印所有其他行。此正則表達式debug: Debug
以空格或行首開始,以空格或行尾結束。- 當
awk
腳本結束時,以錯誤狀態退出{exit err}
。- 因此,如果
/debug: Debug/
在文件中找到,則錯誤狀態將為 0 並且&&
將執行。