2016-07-06 114 views
1

我有我的YAML文件,如下解析YAML文件:我如何從一個Linux shell腳本

report_id: demographics 
columns: 
- date 
- channel_id 
- video_id 
- claimed_status 
- uploader_type 
- live_or_on_demand 
report_id: device_os 
columns: 
- date 
- channel_id 
- video_id 
- asset_id 
- claimed_status 
- uploader_type 
- live_or_on_demand 
- subscribed_status 
- country_code 
- device_type 
- operating_system 

我想使用shell腳本來分析我的YAML文件和想要的答案爲:

report_id: demographics 
date 
channel_id 
video_id 
claimed_status 
uploader_type 
live_or_on_demand 
report_id: device_os 
date 
channel_id 
video_id 
asset_id 
claimed_status 
uploader_type 
live_or_on_demand 
subscribed_status 
country_code 
device_type 
operating_system 
+1

這不是一個有效的YAML文件,因爲您在頂級映射('columns','report_id')中擁有非唯一鍵。您也不能縮進第一個'columns',因爲這會導致更嚴重的解析錯誤,但我猜這是錯字。 – Anthon

回答

1
sed '/columns:/d;s/^\s*-\s*//g' file.yml 
+0

我想通過解析yaml文件作爲函數來顯示report_id中的內容。如下面的代碼: – sneha

+0

function parse_yaml(){local prefix = $ 2 local s ='[[:space:]] *'w ='[a-zA-Z0-9 _] *'fs = $(echo @ | tr @'\ 034') sed -ne「s |^\($ s \):| \ 1 |」 \ -e「s |^\($ s \)\($ w \)$ s:$ s [\''] \(。* \)[\''] $ s \ $ | \ 1 $ fs \ 2 $ fs \ 3 | p「\ -e」s |^\($ s \)\($ w \)$ s:$ s \(。* \)$ s \ $ | \ $ $ fs \ 2 $ fs \ 3 | p「$ 1 | awk -F $ fs'indent = length($ 1)/ 2;如果(長度($ 3)> 0){ vn =「」; for(i = 0); if(i = 0; i sneha

+0

後來當我回顯report_id時,它應該顯示我兩個report_id。我在代碼旁邊編寫一個case語句,以便在作爲變量傳遞時選擇所需的report_id內容。 – sneha