2017-06-28 91 views
0

我試圖讀取文件相匹配的模式,但我想要的值是在下一個連續的線條和是動態的(意思是不同數量不同文件的值)。有人可以幫助我用sed實現這個邏輯嗎?如何打印值/值是在匹配模式的下一行使用sed的

文件1:

hosts: 
- abc 
- def 

文件2:

hosts: 
- abc 
- def 
- ghi 

我想用SED主機的值。 sed的文件1的應該返回

- abc 
- def 

和sed文件2的應該返回

- abc 
- def 
- ghi 

感謝。

+0

文件1: hosts: - abc - def file 2: hosts: - abc - DEF - GHI文件的 SED 1應返回 - ABC - DEF 和sed file2中的應返回 - ABC - DEF - GHI – wasay

+0

使用4位在每行代碼的前/數據/錯誤的MSG或突出顯示的文本塊,並在編輯框的左上角使用'{}'格式的工具作爲代碼/數據/輸出格式化。祝你好運。 – shellter

+1

您如何理解主機列表結束?以下行是什麼? – karakfa

回答

0

hosts,並在下一個空行之間的打印線(如在評論中提到):

sed '/^hosts/,/^$/{//d;}' file 
0
cat file1 | tail -n+2 

會做到這一點,如果你只有一個行標題,然後主機。

+0

感謝您的快速響應。實際上爲主機的值在接下來的連續的行,而不是在同一行作爲主機(所以ABC是在一個新的生產線,DEF是在一個新的行,以便於等等。)。我不知道爲什麼stackoverflow發佈的值與主機在同一行。我還提到了兩個文件只是爲了舉一個例子。我只想使用sed或其他工具從文件中獲取主機的值。 – wasay

+0

這看起來像一個yaml文件。 – MrE

+0

你可能會更好使用YAML解析工具,像Python和對線的基礎線pyyaml – MrE

0

這是一個有點笨拙,但它似乎工作:

sed -n -e ':a' -e '/\n$/{s/hosts:\n//; p;}' -e '/hosts/N' -e '/hosts/ b a' filename