Điểm:0

Cách lưu các dòng đầu ra dòng lệnh cụ thể

lá cờ cn

Tôi có một tệp thực thi tạo ra phần sau cho thiết bị đầu cuối:

---Bắt đầu---
Một số tiếp theo
Thêm văn bản
-1.
1.
0,39
10
-199
một số văn bản khác
   Hoàn chỉnh
---Chấm dứt---

Tôi muốn chỉ ghi các giá trị số trong thiết bị đầu cuối vào một tệp. Ngay bây giờ, tôi đang sử dụng

./executable 2>&1 | grep -vE 'S|M|s|^[--]|^[ ]' | tee log.txt

Điều này dường như để làm những gì tôi muốn. Cụ thể, bằng cách sử dụng -v, tôi nêu rõ những gì cần loại trừ. Tuy nhiên, điều này có vẻ không hiệu quả vì tôi sẽ phải thêm toàn bộ bảng chữ cái (cả chữ hoa và chữ thường) để đảm bảo rằng chỉ các giá trị số mới được thêm vào tệp log.txt.

Có cách nào tốt hơn để ghi tất cả các giá trị số (dương và âm) vào một tệp không?

lá cờ in
Bạn đang tìm kiếm một regex mới? '^[0-9-].*$' sẽ chụp toàn bộ dòng bắt đầu bằng một chữ số hoặc dấu trừ. Hoặc sử dụng \d cho các chữ số, xem ví dụ: [regular-expressions.info](https://www.regular-expressions.info/quickstart.html).
lá cờ hr
Xem ví dụ [grep - Chỉ cho phép biểu thức chính quy dấu phẩy động](https://unix.stackexchange.com/questions/397784/only-allow-floating-points-regex) và [Khớp số dấu phẩy động với biểu thức chính quy](https ://www.regular-expressions.info/floatingpoint.html)
bac0n avatar
lá cờ cn
@pbhj dấu chấm nên được chuyển vào lớp ký tự `'^[0-9.-]*$'` nhưng như @steeldrive đã chỉ ra có thể là không đủ.
waltinator avatar
lá cờ it
Trừ khi nó ở đầu biểu thức, "`-`" bị nhầm lẫn với toán tử "phạm vi" ("`[0-9]`") . Sử dụng "`^[-.0-9]+`". Bạn cũng có thể sử dụng tùy chọn "`-o`" của `grep` để chỉ xuất ra chuỗi phù hợp.
bac0n avatar
lá cờ cn
@waltinator cũng sẽ khớp với Bắt đầu và Kết thúc ...
lá cờ in
@bac0n, không có số nào bắt đầu bằng dấu thập phân, biểu thức chính quy của tôi là tìm các dòng bắt đầu bằng một chữ số hoặc "-", phần còn lại của dòng có thể là bất kỳ ký tự nào. Nếu bạn đặt dấu chấm bên trong bộ chọn phạm vi thì bạn sẽ cần thoát nó vì "." có nghĩa là "bất kỳ ký tự nào một lần", cũng có thể cần phải thoát khỏi "-" (tức là "\-") nhưng nếu nó không nằm giữa hai ký tự khác thì tôi thấy công cụ regex luôn nhận ra đó là một ký tự riêng biệt. Phụ thuộc vào phiên bản của grep (hoặc chương trình khác); của tôi hoạt động cho đầu vào đã cho trong GNU Grep 3.6; thử nghiệm trên Kali.
bac0n avatar
lá cờ cn
@pbhj trước tiên, mẫu cũng sẽ khớp với thẻ bắt đầu và thẻ kết thúc. Tiếp theo, một dấu chấm bên trong dấu ngoặc `[.]` được hiểu theo nghĩa đen (không cần thoát). Nếu một dấu gạch nối được đặt đầu tiên hoặc cuối cùng trong lớp phạm vi, nó cũng sẽ được hiểu theo nghĩa đen.
lá cờ in
Bạn có thể đúng về dấu chấm theo nghĩa đen, không phải thứ mà tôi có kinh nghiệm, nhưng dấu gạch nối không cần thoát chắc chắn hoạt động, như tôi đã nói, đã thử nghiệm trên GNU Grep. Nó khớp với phần đầu vì anh ấy đang tìm các dòng có một chữ số ở đầu, nó khớp với phần cuối vì mẫu cho thấy anh ấy muốn toàn bộ các dòng có một chữ số (hoặc dấu trừ). Thử nó.
bac0n avatar
lá cờ cn
`echo '---Kết thúc---' | grep '^[0-9-].*$'`
Điểm:1
lá cờ cn

Bạn chỉ cần loại trừ các dòng có văn bản trong đó. Sử dụng grep này trong lệnh của bạn:

grep -v '[A-Za-z]'

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