Điểm:0

Cách lấy đúng văn bản với bash

lá cờ bz

Tôi là người mới trong tập lệnh bash. Tôi cố gắng tạo tập lệnh kiểm tra thiết bị ( tp-link, cisco, lynksys... ) để kết nối qua telnet và nhận một số thông tin.

Vì vậy, tập lệnh đầu tiên hoạt động không có vấn đề gì:

#!/bin/sh
NOW=$(ngày +"%m-%d-%Y")
HOST='IPADDRES'
NGƯỜI DÙNG='NGƯỜI DÙNG'
MẬT KHẨU='MẬT KHẨU'
CMD='bật'
CMD2='hiển thị bảng địa chỉ mac'
CMD3='độ dài đầu cuối 0'

(tiếng vang "$HOST - " ; (
    tiếng vang mở "$HOST"
    ngủ 1
    lặp lại "$USER"
    ngủ 1
    tiếng vang "$PASSWD"
    ngủ 1
    tiếng vang "$CMD"
    ngủ 1
    tiếng vang "$CMD3"
    ngủ 1
    tiếng vang "$CMD2\n"
    ngủ 30
    lặp lại "thoát"
    ) | telnet ) > name.$NOW.txt

Khi tôi thực hiện: tên mèo.date.txt tôi nhận được kết quả này


tên máy chủ1 -
telnet> Đang thử tên máy chủ1...
Đã kết nối với tên máy chủ1.
Ký tự thoát là '^]'.
Xác minh quyền truy cập của người dùng

Tên tài khoản: 
Mật khẩu:








                 Chào mừng đến với BDCOM P3310C EPON OLT




tên máy chủ1>bật
tên máy chủ1#độ dài thiết bị đầu cuối 0
hostname1#show mac address-table
        Bảng địa chỉ Mac (Tổng cộng 311)
------------------------------------------

Cổng loại địa chỉ Vlan Mac
---- ----------- ---- -----
Tất cả CPU TĨNH 8479.735b.9132
300 44d9.e776.d8b7 NĂNG ĐỘNG g0/3
300 4c5e.0cff.6dea NĂNG ĐỘNG g0/3
300 d4ca.6d9e.3280 NĂNG ĐỘNG g0/3

Vì vậy, tôi chỉ cần xuất dòng này 1 2 và 4 nó như thế này:

300 44d9.e776.d8b7 NĂNG ĐỘNG g0/3
300 4c5e.0cff.6dea NĂNG ĐỘNG g0/3
300 d4ca.6d9e.3280 NĂNG ĐỘNG g0/3

Tôi không cần bất cứ điều gì trước đây "Cổng loại địa chỉ Vlan Mac"

Vì vậy, tôi làm kịch bản này:

tên mèo.date.txt | awk '$1<"ALL"{print $1" ",$2" ",$3" ",$4}'

Và tôi nhận được kết quả này:

tên máy chủ1 -














             -----------------------------

---- ----------- ---- -----
300 44d9.e776.d8b7 NĂNG ĐỘNG g0/3
300 0002.9b80.7f28 NĂNG ĐỘNG g0/3
300 0002.9b65.7b66 NĂNG ĐỘNG g0/3
300 4c5e.0cff.6dea NĂNG ĐỘNG g0/3
300 d4ca.6d9e.3280 NĂNG ĐỘNG g0/3

Sửa ai?

Tôi chỉ xuất tệp chỉ thông tin này:

300 44d9.e776.d8b7 NĂNG ĐỘNG g0/3
300 0002.9b80.7f28 NĂNG ĐỘNG g0/3
300 0002.9b65.7b66 NĂNG ĐỘNG g0/3
300 4c5e.0cff.6dea NĂNG ĐỘNG g0/3
300 d4ca.6d9e.3280 NĂNG ĐỘNG g0/3

Nếu sẽ tốt hơn nếu tôi có thể xuất sang bảng hoặc csv

Cảm ơn câu trả lời

terdon avatar
lá cờ cn
Eeek! Không sử dụng CAPS cho tên biến trong shell script. Chữ hoa được sử dụng cho các biến môi trường chung nên việc sử dụng cùng tên có thể gây ra sự cố không mong muốn. Ví dụ: `$USER` là một biến môi trường chung được đặt thành tên của người dùng hiện tại, vì vậy bạn _really_ không muốn thay đổi tên đó trong một tập lệnh.
Petar Petrov avatar
lá cờ bz
Có, tôi không sử dụng NGƯỜI DÙNG giống như quản trị viên hoặc petar Chỉ ở đây tôi đặt NGƯỜI DÙNG
terdon avatar
lá cờ cn
Tôi đang nói về tên của các biến của bạn. Bạn nên sử dụng `$user` chứ không phải `$USER` và `$host`, không phải `$HOST`, v.v. Sử dụng CAPS cho tên biến trình bao là một cách làm không tốt.
Petar Petrov avatar
lá cờ bz
Tôi hiểu bạn nói đúng. Tôi sẽ sửa nó, cảm ơn bạn
Điểm:4
lá cờ hr

Giả sử bạn muốn in các dòng từ đâu $1 bằng Tất cả các cho đến khi kết thúc tệp bằng awk:

awk '$1=="Tất cả" {p=1; tiếp theo} p' name.date.txt

(bỏ qua tiếp theo nếu bạn muốn bao gồm dòng phù hợp).

Để phân tách đầu ra bằng dấu phẩy, hãy đặt dấu tách trường đầu ra thành "," và buộc tạo lại bản ghi bằng cách đánh giá $1=$1 Ví dụ:

awk '$1=="Tất cả" {p=1; OFS=","; tiếp theo} p {$1=$1; in}' name.date.txt
Điểm:1
lá cờ vn

Có một số tùy chọn, nhưng bạn chưa xác định tiêu chí rõ ràng của mình - vì vậy tôi chủ yếu đoán ở đây.

Nếu đầu ra bạn cần luôn ở dưới cùng của tệp, bạn có thể sử dụng đuôi để có được các dòng X cuối cùng, ví dụ:

đuôi -n 6 tên.date.txt 

... sẽ cung cấp cho bạn 6 dòng cuối cùng (bảng).

Cổng loại địa chỉ Vlan Mac
---- ----------- ---- -----
Tất cả CPU TĨNH 8479.735b.9132
300 44d9.e776.d8b7 NĂNG ĐỘNG g0/3
300 4c5e.0cff.6dea NĂNG ĐỘNG g0/3
300 d4ca.6d9e.3280 NĂNG ĐỘNG g0/3

Một lựa chọn khác là sử dụng tiếng kêu để tìm kiếm một mẫu, ví dụ:

grep 'STATIC\|DYNAMIC' name.date.txt

... sẽ khớp với những dòng có chứa từ TĨNH hoặc NĂNG ĐỘNG.

Tất cả CPU TĨNH 8479.735b.9132
300 44d9.e776.d8b7 NĂNG ĐỘNG g0/3
300 4c5e.0cff.6dea NĂNG ĐỘNG g0/3
300 d4ca.6d9e.3280 NĂNG ĐỘNG g0/3
Petar Petrov avatar
lá cờ bz
Xin chào, cảm ơn vì câu trả lời. Biến thể "grep 'STATIC\|DYNAMIC' name.date.txt" là hoàn hảo đối với tôi. Cảm ơn

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