Text-Processing

在文件中查找一個字元串,然後用 bash 查找上麵包含另一個字元串的第一行

  • September 10, 2019

如何在文件中找到一個字元串,然後找到包含它之前的“srv”的行的第一個實例。

我一直在研究Tac 和sed,但未能使其正常工作。

要搜尋的輸出文件看起來像

srv-test-1 | SUCCESS | rc=0 >>
a1
A3
srv-test-2 | SUCCESS | rc=0 >>
a1
b1
b2
B3
B4

程式碼提示使用者輸入他們正在查找的字元串並將其儲存到變數中。

我可以使用找到使用者請求

tac file | grep $requested

如果使用者請求 b1,我希望它返回

b1 found on srv-test-2

同樣,如果請求 a1 它會返回

a1 found on srv-test-1
a1 found on srv-test-2

如果您要搜尋多個項目,您可以將整個文件轉換為可 grep 的條目列表。

awk '/^srv/ { c = $1 ; next } { print $0 " found on " c }'

在輸入文件上會給你

a1 found on srv-test-1
A3 found on srv-test-1
a1 found on srv-test-2
b1 found on srv-test-2
b2 found on srv-test-2
B3 found on srv-test-2
B4 found on srv-test-2

然後搜尋單個項目,您可以過濾以前的輸出

awk '/^srv/ { c = $1 ; next } { print $0 " found on " c }' | grep '^a1'

給予

a1 found on srv-test-1
a1 found on srv-test-2

引用自:https://unix.stackexchange.com/questions/539866