Làm thế nào tôi có thể làm cho sed xóa một dòng sau đó bỏ qua kiểm tra các tập tin?


1

Tôi đang sử dụng lệnh sau để trích xuất các mô tả từ các bản vá:

sed '
    s/Title: \(.*\)/### \1 ###\n\n**File:** FILE_NAME_HERE/
    /^diff\|^---/ {
        q
    }
' "$patch" | egrep -v '^(diff|---)'

Làm thế nào tôi có thể thoát khỏi egrep -v '^(diff|---)'một phần và chỉ sử dụng sed? Tôi đã thử làm điều này:

/^diff\|^---/ {
    d # <-- This is what I added
    q
}

Nhưng một khi đạt được "d", "q" sẽ bị bỏ qua và phần còn lại của các dòng trong phần thân của bản vá được in. Đây là một bản vá mẫu:

Title: Font Array Support

Modifies st to support user-defined fallback fonts specified in an array
defined as `static const char *fonts[]`. This change also resolves an issue
where fallback fonts were used in place of default fonts in an inconsistent
manner which caused identical sets of text to sometimes use different fonts. In
the following example, DejaVu Sans Mono is the primary font with two others
specified as fallbacks:

    static const char *fonts[] = {
        "DejaVu Sans Mono",
        "VL Gothic",
        "WenQuanYi Micro Hei",
    };

diff --git a/st.c b/st.c
index 2594c65..f7973bd 100644
--- a/st.c
+++ b/st.c
@@ -353,10 +353,17 @@ typedef struct {
    FcPattern *pattern;
 } Font;

Kịch bản sed sẽ trả về mọi thứ phía trên dòng bắt đầu bằng "diff;" đây là những gì đầu ra nên:

Title: Font Array Support

Modifies st to support user-defined fallback fonts specified in an array
defined as `static const char *fonts[]`. This change also resolves an issue
where fallback fonts were used in place of default fonts in an inconsistent
manner which caused identical sets of text to sometimes use different fonts. In
the following example, DejaVu Sans Mono is the primary font with two others
specified as fallbacks:

    static const char *fonts[] = {
        "DejaVu Sans Mono",
        "VL Gothic",
        "WenQuanYi Micro Hei",
    };

@ John1024, tôi đã thêm một bản vá mẫu.
Eric Pruitt

Câu trả lời:


0

trả lại mọi thứ phía trên dòng bắt đầu bằng "diff;"

Sử dụng sed

Trong trường hợp đó, hãy thử:

sed '/^diff/,$d' a.patch

Ở trên xóa tất cả các dòng từ đầu tiên phù hợp với biểu thức chính quy ^diffđến dòng cuối cùng , $.

Một phiên bản hiệu quả hơn một chút sẽ thoát khi ^diffđạt đến dòng chứa :

sed -n '/^diff/q; p' a.patch

Sử dụng tệp mẫu của bạn:

$ sed -n '/^diff/q; p' a.patch
Title: Font Array Support

Modifies st to support user-defined fallback fonts specified in an array
defined as `static const char *fonts[]`. This change also resolves an issue
where fallback fonts were used in place of default fonts in an inconsistent
manner which caused identical sets of text to sometimes use different fonts. In
the following example, DejaVu Sans Mono is the primary font with two others
specified as fallbacks:

    static const char *fonts[] = {
        "DejaVu Sans Mono",
        "VL Gothic",
        "WenQuanYi Micro Hei",
    };

Sử dụng awk

Sử dụng awk:

awk '/^diff/{exit} 1' a.patch

Đây 1là tốc ký mật mã của awk cho dòng in. Tuy nhiên, khi ^diffđạt đến dòng đầu tiên phù hợp với biểu thức chính quy , chương trình sẽ thoát.

$ awk '/^diff/{exit} 1' a.patch
Title: Font Array Support

Modifies st to support user-defined fallback fonts specified in an array
defined as `static const char *fonts[]`. This change also resolves an issue
where fallback fonts were used in place of default fonts in an inconsistent
manner which caused identical sets of text to sometimes use different fonts. In
the following example, DejaVu Sans Mono is the primary font with two others
specified as fallbacks:

    static const char *fonts[] = {
        "DejaVu Sans Mono",
        "VL Gothic",
        "WenQuanYi Micro Hei",
    };

1
Cảm ơn, điều đó làm việc. Tôi thực sự thoải mái với awk, nhưng tôi muốn cải thiện hơn với sed, và tôi cũng thấy việc viết kịch bản sed di động dễ dàng hơn so với các kịch bản awk di động có thể vì tôi đã bị hư hỏng bởi rất nhiều tiện ích mở rộng hữu ích trong khi tôi hiếm khi thấy mình khao khát các tính năng mới khi tôi sử dụng sed. Trong trường hợp này, tập lệnh awk bạn đã đăng là hoàn hảo, nhưng tập lệnh sed tôi đã đăng là phiên bản rút gọn của những gì tôi thực sự đang sử dụng.
Eric Pruitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.