Điểm:1

Cách thay thế chuỗi trong n dòng cuối cùng của nhiều tệp trong linux

lá cờ vu

Làm cách nào tôi có thể thay thế các chuỗi trong giả sử '10 dòng cuối cùng' của nhiều tệp?

Tôi có khoảng 100 tệp có cùng phần mở rộng '.txt' và tôi muốn thay thế chuỗi 'GLN' thành 'LOO' trong 10 dòng cuối của mỗi tệp. Làm thế nào để tôi làm điều này? Tôi biết cách thực hiện cho một tệp chứ không phải cho nhiều tệp. Khi tôi sử dụng lệnh này;

cho tôi trong `head -3 *.txt | awk '{in $4}'`
     làm
                   sed -i 's/GLN/LOO/g' *.txt 
     xong

Nó thay thế GLN ở mọi nơi nó xuất hiện trong các tệp và không chỉ 10 dòng cuối cùng. Xin vui lòng, tôi đang làm gì sai?

Điểm:2
lá cờ hr

Không rõ là gì đầu -3 *.txt | awk '{in $4}' quay lại đây vì bạn chưa cho chúng tôi xem (các) mẫu tệp của bạn, tuy nhiên sed -i 's/GLN/LOO/g' *.txt sẽ thay thế lại tất cả các thể hiện của GLN trong tất cả các các dòng trong tất cả các các tập tin phù hợp *.txt, miễn là vòng lặp thực hiện ít nhất một lần.

AFAIK không có cách trực tiếp nào để giải quyết vấn đề cuối cùng N các dòng của tệp trong sed - vì vậy để sử dụng tệp đó, bạn cần tính toán phần bù bên ngoài, sử dụng wc -l và số học shell chẳng hạn:

cho f trong *.txt; làm 
  bắt đầu=$(( $(wc -l <"$f") - 9 ))
  sed "$start"',$s/GLN/LOO/g' "$f"
xong

(Tôi đã gỡ bỏ -tôi vì vậy đầu ra đi đến thiết bị đầu cuối, để thử nghiệm). Bạn có thể sử dụng một cái gì đó như awk 'END{print NR-9}' "$f" thay cho $(( $(wc -l <"$f") - 9 )) để bắt đầu bù đắp nếu ý định của bạn là sử dụng awk.

Ngoài ra, bạn có thể sử dụng tắc để đảo ngược tệp và thay thế tệp đầu tiên N dòng, sau đó tắc kết quả - mặc dù điều đó làm cho việc thay thế tại chỗ trở nên phức tạp.

Trong tình huống này tôi có lẽ sẽ đạt được biên tập hoặc Ví dụ hỗ trợ bù đắp địa chỉ số cũ. thử nghiệm với đầu ra cho thiết bị đầu cuối:

cho f trong *.txt; làm 
  printf '%s\n' '$-9,$s/GLN/LOO/g' ',p' | ed -s "$f"
xong

Một khi bạn hài lòng vì nó đang làm đúng, hãy thay đổi ,P đến wq đến wghi kết quả vào tệp (tương đương với sed's -tôi).

Điểm:1
lá cờ cn

Tôi sẽ sử dụng các hàm tac và awk cho công việc này như sau:

tac file1.txt | awk 'NR<11 {gsub("GLN","LOO")};{print}' | tắc

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