Зависит от оболочки, но вот несколько способов:
!!
Ctrl + P
!-1
Все должно быть зафиксировано нажатиемEnter
Вы можете использовать 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
С awk / gsub -предполагается, что мы можем заменить любую десятичную цифру в последнем поле, если оно начинается с $
, то есть нам не нужно обрабатывать такие вещи, как123$45 -> 123$**
:
awk '$NF ~ /\$[0-9]+/ {gsub(/[0-9]/,"*",$NF)} 1' file
Perl дает хороший способ сделать это, если он у вас есть:
perl -lpe 's/\$([0-9]*)/"\$". "*" x length($1)/e'
Это позволяет использовать замещающую часть регулярного выражения как выражение Perl, а не фиксированную строку. (Флаг /e
)для создания соответствующего количества звездочек по запросу требующий цикла «повторять до завершения».