thay thế số bằng mẫu cụ thể sao cho toàn bộ tệp


2

Trong tập tin của tôi, tôi muốn thay thế số *

Thí dụ:

data[0] ---> data[*]

Tôi có data[0]đến data[127]và cũng muốn làm cho toàn bộ tập tin. Vì vậy, làm thế nào tôi chỉ có thể làm cho số?

Tôi đã thử với lệnh

sed 's/[[0-9][0-9]]/[*]/g'

nhưng nó không hoạt động đúng.

Vì vậy, xin vui lòng hướng dẫn cho tôi.


Tại sao nó không đơn giản như sed 's/[0-9]/*/g?
datdinhquoc

1
Nó cũng sẽ ảnh hưởng đến số khác. Giả sử set_load -pin_load 0.5 [get_ports {data [25]}] thì nó cũng sẽ thay đổi 0,5 thành *.
Vishal Patel

Vấn đề trong những gì bạn đã cố gắng là không thoát khỏi dấu ngoặc vuông khi bạn không muốn chúng có ý nghĩa đặc biệt.
simlev

Câu trả lời:


0

Điều này sẽ thay thế tất cả các chữ số trong dấu ngoặc vuông thành dấu hoa thị:

sed 's/\[[0-9]*\]/\[*\]/g'

1
Tôi tin rằng không cần phải thoát khỏi dấu ngoặc vuông trong phần thay thế, vì chúng không có ý nghĩa đặc biệt ở đó.
simlev

0

Trả lời: Đây là cách bạn có thể sửa đổi biểu thức SED dự kiến ​​( sed 's/[[0-9][0-9]]/[*]/g'):

sed -E 's/\[[0-9]{1,3}]/[*]/g'

Giải trình:

  • thoát dấu ngoặc vuông ban đầu [bằng dấu gạch chéo ngược \vì bạn muốn biểu thức khớp với một chữ thay [vì bất kỳ ký tự nào bạn viết giữa dấu ngoặc vuông. Dấu ngoặc vuông tiếp theo không cần thoát.

  • chỉ định có bao nhiêu chữ số bạn muốn khớp: {1,3}có nghĩa là bất kỳ số tự nhiên nào bắt đầu bằng 1và lên đến 3. Để làm việc này, bạn cần kích hoạt các biểu thức chính quy mở rộng bằng công -Etắc (nếu không có nó, bạn có thể hài lòng với sed 's/\[[0-9]*]/[*]/g'). Nó nên có sẵn trong của bạn sedkể từ, theo man sed:

    tùy chọn -E đã được GNU sed hỗ trợ trong nhiều năm và hiện được bao gồm trong POSIX.


Thay thế Perl ở đây:

perl -pe 's/data\[\K\d+(?=])/*/g'
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.