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
).