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 cut
và / hoặc paste
vớ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ì sed
sẽ luôn chèn một \n
ewline trước đầu ra của r
ead. 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 e
thực hiện cat
mỗi khi nó gặp /First/
địa chỉ của bạn . Nó thực hiện điều này trong h
không gian cũ (dù sao - một bộ đệm thay thế - bởi vì tôi x
thay đổi chúng, nó thực sự xảy ra trong không gian mẫu đã từng là h
không gian cũ) để bảo toàn nội dung của dòng khớp First
và sau đó nối thêm cat
đầu ra đến dòng của bạn và loại bỏ \n
ewline 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 \n
ký tự ewline, lưu nó trong h
không gian cũ, e
xecutes cat
- thay thế không gian mẫu bằng đầu ra của nó - G
lấ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 \n
ký tự ewline khác , sau đó sắp xếp lại \n
phân định ewline.
Tôi làm echo .
để bảo vệ bất kỳ dấu \n
ký 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 .\n
trong 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