Điểm:0

Làm cách nào để nối vào cuối dòng trước khi khớp mẫu đầu tiên?

lá cờ in

Tôi có một tệp chứa một số dữ liệu ngẫu nhiên như:

số1 số2 số3
&CHẤM DỨT

Tôi muốn thêm \ vào cuối dòng chứa số 3, nhưng tôi không thể khớp một mẫu trên dòng đó vì số đó liên tục thay đổi. Vì vậy, tôi thử khớp "&END" trong sed và sau đó nối thêm một dòng trước nó, nhưng điều đó không hiệu quả với tôi vì nó tạo ra một dòng mới, như

số1 số2 số3

\

&CHẤM DỨT

đầu ra mong muốn của tôi là

số1 số2 số3 \
&CHẤM DỨT

Ngoài ra, tôi chỉ cần thực hiện thay đổi này ở lần xuất hiện đầu tiên của &END trong tệp. Có cách nào để thực hiện việc này bằng cách sử dụng sed hoặc có thể là awk không?

CHỈNH SỬA: Tệp đầu vào của tôi là test.restart, giống như:

&PHỐI HỢP

1.4089452021105357E+01 1.3165670625576730E+01 1.2727066323166799E+01 \
 ...

 ...

1.3549295360587577E+01 1.2120902691780184E+01 1.2741652733169291E+01

&CHẤM DỨT
...
...
&PHỐI HỢP

H 3475843 73457834 7346587435
...
...
&CHẤM DỨT

Tôi chỉ cần thực hiện các thay đổi trong khối văn bản trước lần xuất hiện đầu tiên của &END.

pLumo avatar
lá cờ in
Bạn cần thêm một số ví dụ thực tế để làm cho câu hỏi của bạn có thể giải được.
Pauling0304 avatar
lá cờ in
@pLumo Ví dụ thực tế về cái gì? Các giải pháp đã thử của tôi không hiệu quả?
pLumo avatar
lá cờ in
Ý tôi là dữ liệu đầu vào. ("*cuối dòng chứa số 3, nhưng tôi không thể khớp một mẫu trên dòng đó vì số đó liên tục thay đổi.*"). Vậy "*số3*" trong thế giới thực của bạn là gì? Hoặc tốt hơn: làm thế nào để bạn biết rằng đây là dòng bạn muốn khớp?
pLumo avatar
lá cờ in
Một gợi ý khác: Sử dụng kiểu `code` thay vì kiểu `quote` sẽ giúp câu hỏi của bạn dễ đọc hơn. Bạn có thể chỉnh sửa câu hỏi của bạn.
pLumo avatar
lá cờ in
okkkk... ví dụ thực tế của bạn rất khác với ví dụ đơn giản hóa của bạn. \ không nên ở cuối dòng trước `&END`... Thay vào đó, nó sẽ ở dòng tiếp theo sau `&COORD` chứ?
Pauling0304 avatar
lá cờ in
@pLumo Không, \ ở cuối dòng sau &COORD đã có sẵn. Bây giờ tôi muốn đặt nó ở cuối dòng trước &END.
pLumo avatar
lá cờ in
ah tốt, sau đó câu trả lời của tôi là hợp lệ.
Điểm:1
lá cờ in

Bạn có thể dùng sed -z và bao gồm \N trong mô hình của bạn:

-z, --null-dữ liệu
các dòng riêng biệt bằng các ký tự NUL

sed -Ez 's/(\n+&END)/ \1/' tập tin

sed theo mặc định chỉ thay thế lần xuất hiện đầu tiên trên mỗi dòng. Vì bạn chỉ có một dòng nếu bạn sử dụng dấu phân cách NUL, bạn vẫn ổn.

-E kể sed để sử dụng Regex mở rộng (ERE) thay vì Regex cơ bản (BRE). Bạn có thể bỏ qua cờ, nhưng sau đó bạn cần thoát khỏi dấu ngoặc nhọn:

sed -z 's/\(\n+&END\)/ \1/' tập tin

Đầu ra:

&PHỐI HỢP

1.4089452021105357E+01 1.3165670625576730E+01 1.2727066323166799E+01 \
 ...

 ...

1.3549295360587577E+01 1.2120902691780184E+01 1.2741652733169291E+01 \

&CHẤM DỨT
...
...
&PHỐI HỢP

H 3475843 73457834 7346587435
...
...
&CHẤM DỨT

Ghi chú, -z vẫn ổn trong Ubuntu, nhưng không có sẵn trong tất cả sed triển khai và do đó không phải là một giải pháp di động.

Pauling0304 avatar
lá cờ in
Bạn có thể cho tôi biết cờ -E dùng để làm gì không? Và tôi có thể sử dụng -i với nó không, vì tôi muốn chỉnh sửa tệp này thành cùng một tệp?
pLumo avatar
lá cờ in
Có, bạn có thể sử dụng `-i` nếu bạn hài lòng với đầu ra. Đã thêm giải thích cho `-E`.
Pauling0304 avatar
lá cờ in
tôi nhận được lỗi: sed: -e biểu thức #1, ký tự 19: tham chiếu không hợp lệ \1 trên RHS của lệnh `s'
pLumo avatar
lá cờ in
chắc chắn, bạn sử dụng cùng một lệnh?
Pauling0304 avatar
lá cờ in
Vâng, tôi thậm chí đã sao chép và dán
pLumo avatar
lá cờ in
Cả hai đều làm việc tốt cho tôi. phiên bản Ubuntu nào? Tôi gặp lỗi này khi sử dụng phiên bản đầu tiên không có `-E`, điều này có thể xảy ra
Pauling0304 avatar
lá cờ in
Ubuntu 20.04.3 LTS
pLumo avatar
lá cờ in
Cùng một phiên bản ở đây. Nên hoạt động tốt, không thể nói nữa, tôi xin lỗi.
Pauling0304 avatar
lá cờ in
Tôi đã thử tùy chọn khác không có cờ -E và điều đó không gây ra bất kỳ lỗi nào nhưng nó cũng không thực hiện được công việc.
pLumo avatar
lá cờ in
Ý kiến ​​hay @bac0n.

Đă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.