Điểm:0

Trích xuất khóa từ tệp yaml bằng awk

lá cờ ru

Giả sử tôi có một tệp yaml như thế này:

foo:
  thanh: 1

vi:
  firstVar: đúng
  thứ haiVar: 20
  aa_thirdVar: 'xin chào'
  aa_fourthVar: sai

và tôi cần lấy chìa khóa dưới env phím ngoại trừ các phím có aa_ tiền tố làm mảng bash để sử dụng mảng trong tập lệnh bash.

Điểm:1
lá cờ cn

Sử dụng yq lệnh từ https://kislyuk.github.io/yq/ một công cụ thích hợp để phân tích các tệp định dạng YAML, bạn có thể làm:

yq -r '.env|to_entries[]|
    nếu (.key|test("^[^a][^a][^_]*$")) thì
        ( .key + "=" + (.value | @sh) )
    khác
        trống rỗng
    chấm dứt
' trong tập tin

đầu ra nào:

firstVar=true
thứ haiVar=20

bây giờ bạn chỉ cần xuất khẩu các bộ biến này

xuất $(yq ... )

hoặc tạo một mảng:

IFS=$'\n' mảng=( $(yq ... ) )

bên trong ( .key + "=" + (.value | @sh) ) một phần, nó nối các cặp khóa-giá trị được tạo bằng cách sử dụng to_entries chức năng và @sh cú pháp (được gọi là "Chuỗi định dạng và Thoát") được sử dụng để cung cấp định dạng thoát trình bao POSIX sh trên giá trị.

lá cờ hr
Ít nhất trong jq-1.6 có một boolean `startswith()`, vì vậy bạn cũng có thể làm điều gì đó như `.env | to_entries[] | select(.key | startedwith("aa_") | not) | ( .key + "=" + (.value | @sh) )`
αғsнιη avatar
lá cờ cn
@steeldriver Tôi không nghĩ rằng họ có thể có một số chức năng cho trận đấu đó sang một bên (), chụp () và kiểm tra (); hấp dẫn! cảm ơn rất nhiều
lá cờ hr
tbh tôi chỉ phát hiện ra điều đó ngay trước khi bạn đăng - nhưng tôi chưa nghĩ ra thứ gì hay như `( .key + "=" + (.value | @sh) )` của bạn cho định dạng đầu ra

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.