заменить номер звездочкой для всего файла

343
Vishal Patel

В моем файле я хочу заменить номер на *

Пример:

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

У меня есть data[0]к, data[127]а также хотят, чтобы сделать для всего файла. Так как же мне сделать только номер?

Я пробовал с командой

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

но это не работает должным образом.

Поэтому, пожалуйста, ведите меня.

2
почему это не должно быть так просто, как `sed 's / [0-9] / * / g`? datdinhquoc 5 лет назад 0
Это также повлияет на другой номер. Предположим, set_load -pin_load 0.5 [get_ports ], тогда он также изменит 0.5 на *. Vishal Patel 5 лет назад 1
The issue in what you tried is not escaping square brackets when you don't want them to have a special meaning. simlev 5 лет назад 0

2 ответа на вопрос

0
datdinhquoc

Это заменит все цифры в квадратных скобках на звездочки:

sed 's/\[[0-9]*\]/\[*\]/g' 
I believe there's no need to escape the square brackets in the replacement section, as they have no special meaning there. simlev 5 лет назад 0
0
simlev

Ответ: Вот как вы можете изменить свое предварительное выражение SED ( sed 's/[[0-9][0-9]]/[*]/g'):

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

Объяснение:

  • экранируйте начальную квадратную скобку [с обратной косой чертой, \потому что вы хотите, чтобы выражение совпадало с литералом, [а не с любым из символов, которые вы пишете в квадратных скобках. Последующие квадратные скобки не нуждаются в экранировании.

  • укажите, сколько цифр вы хотите сопоставить: означает любое натуральное число, начиная с 1и до 3. Чтобы это работало, вам нужно включить расширенные регулярные выражения с помощью -Eпереключателя (без него вы могли бы быть довольны sed 's/\[[0-9]*]/[*]/g'). Он должен быть доступен в вашей sedверсии, согласно man sed:

    опция -E поддерживалась GNU sed в течение многих лет и теперь включена в POSIX.


Альтернатива Perl здесь:

perl -pe 's/data\[\K\d+(?=])/*/g'