我可以讓 grep 將轉義的多行視為單行嗎?

我可以讓 grep 將轉義的多行視為單行嗎?

如何製作像grep將用反斜線轉義的多行視為長單行這樣的工具?

假設我有一些如下所示的文件:

testvar=test1 \
        test2 \
        test3

othervar=oth1 \
         oth2

如果我現在grep為 testvar 它會返回testvar=test1 \,但是有什麼辦法可以讓它返回testvar=test1 test2 test3嗎?

或多或少如何將這些多個轉義行視為單行?

筆記:如果無法使用 來完成此操作,也歡迎grep有關如何使用其他工具(例如sed或 )來完成此操作以獲得相同結果的提示。awk

答案1

根據awk您的用例設定欄位分隔符號和記錄分隔符號:

awk 'BEGIN { FS="\n"; RS ="" } /testvar/' yourfile
testvar=test1 \
        test2 \
        test3

請參閱手動輸入多行記錄

答案2

您可以使用連接這些行的內容對其進行預處理,例如:

awk 'match($0,/\\+$/) && RLENGTH % 2 {
       sub(/\\$/,""); printf "%s", $0; next
     }
     {print}' | grep ...

相關內容