Замена символов после строки

Зависит от оболочки, но вот несколько способов:

  • !!
  • Ctrl + P
  • !-1

Все должно быть зафиксировано нажатиемEnter

2
15.11.2020, 21:43
3 ответа

Вы можете использовать sedпреимущество, не касаясь вкладок/пробелов или полей:

sed -E ':a s/(\$\**)[^*]/\1*/; ta' infile

заменить все ($<zero-or-more-*>)[<non-*-character>]на$<zero-or-more-*><plus-additional-*-added>(\1*; \1— это обратная -ссылка на первую совпавшую группу в sed, определяемую как (...)), пока все <non-*-character>не будут заменены на *с.


Немного сложно, но если вы хотите принудительно изменить только последнее поле, вы можете использовать команду таким образом:

sed -E ':a s/(\$\**)[^*]([^$]*)$/\1*\2/; ta' infile
6
18.03.2021, 22:49

С awk / gsub -предполагается, что мы можем заменить любую десятичную цифру в последнем поле, если оно начинается с $, то есть нам не нужно обрабатывать такие вещи, как123$45 -> 123$**:

awk '$NF ~ /\$[0-9]+/ {gsub(/[0-9]/,"*",$NF)} 1' file
4
18.03.2021, 22:49

Perl дает хороший способ сделать это, если он у вас есть:

perl -lpe 's/\$([0-9]*)/"\$". "*" x length($1)/e'

Это позволяет использовать замещающую часть регулярного выражения как выражение Perl, а не фиксированную строку. (Флаг /e)для создания соответствующего количества звездочек по запросу требующий цикла «повторять до завершения».

2
18.03.2021, 22:49

Теги

Похожие вопросы