Thay thế chuỗi dựa trên số dòng


50

Tôi có một tình huống mà tôi muốn thay thế một chuỗi cụ thể trong nhiều tệp

Thay thế một chuỗi AAA bằng một chuỗi BBB khác nhưng có rất nhiều chuỗi bắt đầu bằng AAA hoặc kết thúc bằng AAA và tôi muốn chỉ thay thế một chuỗi trên dòng 34 và giữ nguyên các chuỗi khác.

Có thể chỉ định theo số dòng, trên tất cả các tệp, chuỗi này chính xác trên dòng thứ 34.

Câu trả lời:


82

Bạn có thể chỉ định số dòng trong sed hoặc NR (số lượng bản ghi) trong awk.

awk 'NR==34 { sub("AAA", "BBB") }'

hoặc sử dụng FNR (bản ghi số tệp) nếu bạn muốn chỉ định nhiều hơn một tệp trên dòng lệnh.

awk 'FNR==34 { sub("AAA", "BBB") }'

hoặc là

sed '34s/AAA/BBB/'

để thay thế tại chỗ với sed

sed -i '34s/AAA/BBB/' file_name

-3

giả sử rằng bạn muốn thay thế dòng thứ ba trong file_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record

sử dụng lại trích dẫn trước đầu và sau -1 ... ở đây không lấy nó
RAMAN

1
Điều này sẽ không đi làm. Nó cần một số nhiệm vụ nặng nề thoát. Và nếu dòng thứ ba được nhân đôi ở nơi khác thì sao?
Sparhawk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.