Vì vậy, sẽ có một chút khó khăn để làm cho công việc này trở nên rõ ràng sed- bạn nên tìm kiếm cutvà / hoặc pastevới một số tiền thân regex tạo tập lệnh của chúng trong ngữ cảnh đó - và điều này là vì sedsẽ luôn chèn một \newline trước đầu ra của read. Tuy nhiên, w / GNU sed:
sed '/First/{x;s/.*/cat file/e;H;x;s/\n//}' <<\IN
First
Second
Third
IN
Điều đó hoạt động bằng cách ethực hiện catmỗi khi nó gặp /First/địa chỉ của bạn . Nó thực hiện điều này trong hkhông gian cũ (dù sao - một bộ đệm thay thế - bởi vì tôi xthay đổi chúng, nó thực sự xảy ra trong không gian mẫu đã từng là hkhông gian cũ) để bảo toàn nội dung của dòng khớp Firstvà sau đó nối thêm catđầu ra đến dòng của bạn và loại bỏ \newline can thiệp .
ĐẦU RA:
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
]
Second
Third
Bây giờ nếu bạn muốn toàn bộ nội dung của tệp khớp giữa hai phần của một dòng phải hoạt động khác nhau một chút vì với lệnh trên, tôi chỉ cần xóa dòng mới giữa cuối dòng phù hợp và đầu tệp. Tuy nhiên, bạn cũng có thể làm điều này:
sed '/First/{s//&\n/;h
s/.*/{ cat file; echo .; }/e;G
s/\(.*\).\n\(.*\)\n/\2\1/
}' <<\IN
Third
Second
First Second Third
Third
Second
First Second Third
IN
Điều đó phân chia dòng tại trận đấu với một \nký tự ewline, lưu nó trong hkhông gian cũ, executes cat- thay thế không gian mẫu bằng đầu ra của nó - Glấy nội dung của không gian giữ được gắn vào không gian mẫu mới của chúng ta theo một \nký tự ewline khác , sau đó sắp xếp lại \nphân định ewline.
Tôi làm echo .để bảo vệ bất kỳ dấu \nký tự ewline trong file- nhưng nếu đó không phải là mong muốn của bạn (và không phải là rất phù hợp với ví dụ của bạn anyway) bạn có thể làm mà không có nó và loại bỏ đầu tiên .trước .\ntrong sau s///ubstitution.
Ngay trước khi sắp xếp lại không gian mô hình trông như thế này:
^cat's output - any number of newlines.*.\nmatch on First\nrest of match$
ĐẦU RA:
Third
Second
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
] Second Third
Third
Second
First[
{
"foo": "bar",
"baz": "biff",
"data": [
{
"a": 1945619,
"b": [
{
"c": 512665,
"d": "futz"
}
]
}
]
}
] Second Third