|Welcome to the Monastery|
Repeating a substitutionby choroba (Bishop)
|on Jan 09, 2018 at 10:39 UTC||Need Help??|
Inspired by Stack Overflow, again.
A user asked for a (awk or similar) one-liner that would replace a separator by a different one in a file, but only the first N separators should be replaced.
For small Ns, it's easiest to repeat the substitution:
But, what should one do when they want to replace the first 10 separators?
My first idea was to use a for loop:
Unfortunately, it doesn't work, as the for creates another local $_ and the substitution happens to the numbers, not the input.
So, my next idea was to use a counter with /e:
It works, but is ugly and hard to explain to someone not familiar with Perl.
Another way is to tie the two $_ variables together by aliasing the outer $_ by the inner one:
Again, this works only for small number of substitutions.
But, we can generalize a list of the same things: we can use the x operator in list context! It's short, readable, and follows the DRY principle: