替换字符串后的字符

Rwd*_*dxr 2 sed awk text-processing

S-123-P Bash Pocket Ref.        2010    Cengage Learning    $55
E-P234  Python Pocket Ref.      2012    Cengage Learning    $45
55-MNP  Unix System Programming 2001    Sybex               $230
Run Code Online (Sandbox Code Playgroud)

我需要在$不包括$with之后替换数字*,所以输出需要是:

S-123-P Bash Pocket Ref.        2010    Cengage Learning    $**
E-P234  Python Pocket Ref.      2012    Cengage Learning    $**
55-MNP  Unix System Programming 2001    Sybex               $***
Run Code Online (Sandbox Code Playgroud)

我已经能够替换最后一位或最后 2 位,但不是$. 我试过sedawkgsub 但我尝试的任何东西似乎都不起作用。

αғs*_*нιη 6

您可以使用sed不触及选项卡/空格或字段意图的优势:

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

将每个替换($<zero-or-more-*>)[<non-*-character>]$<zero-or-more-*><plus-additional-*-added>( \1*;\1是对sed定义中第一个匹配组的反向引用(...)),直到所有<non-*-character>s 都替换为*s。


有点复杂,但如果您只想在最后一个字段上强制更改,您可以这样使用命令:

sed -E ':a s/(\$\**)[^*]([^$]*)$/\1*\2/; ta' infile
Run Code Online (Sandbox Code Playgroud)