Why is this not working?
$data = "What is the STATUS of your mind right now?";
$data =~ tr/ +/ /;
print $data;
Continuing with that same thought, if your string with spaces is already stored in a variable, you can simply use echo unquoted within command substitution to have bash remove the additional whitespace for your, e.g. $ foo="too many spaces."; bar=$(echo $foo); echo "$bar" too many spaces.
Answer: Use the JavaScript replace() method.
You must escape the space character with a backslash (write "\ ") or use \s to specify whitespace that is part of the pattern. tells Perl to save its place in the string so that you can iterate through the string and match the same pattern multiple times.
Use $data =~ s/ +/ /;
instead.
Explanation:
The tr
is the translation operator. An important thing to note about this is that regex modifiers do not apply in a translation statement (excepting -
which still indicates a range). So when you usetr/ +/ /
you're saying "Take every instance of the characters space and +
and translate them to a space". In other words, the tr
thinks of the space and +
as individual characters, not a regular expression.
Demonstration:
$data = "What is the STA++TUS of your mind right now?";
$data =~ tr/ +/ /;
print $data; #Prints "What is the STA TUS of your mind right now?"
Using s
does what you're looking for, by saying "match any number of consecutive spaces (at least one instance) and substitute them with a single space". You may also want to use something likes/ +/ /g;
if there's more than one place you want the substitution to occur (g
meaning to apply globally).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With