I'll give two examples:
Example 1,
touch {a..z}
ls
a b c d e f g h i j k l m n o p q r s t u v x w y z
but I want to reject n
a b c d e f g h i j k l m "" o p q r s t u v x w y z
Example 2, (what I really want to do)
ls
c1 c-2 ca4 cA5 cs1 cs2 cs3 cs4 cs5
rm c* #but not starting with "cs"
With example 1 I'm not trying to be ambiguous, I want something like:
rm c*(!s) #this command will give an error, but I want to remove all strings starting with "c", not "cs"
How do I reject a character?
CodePudding user response:
You seem to be asking for a solution in the area of pattern matching, so a negated character class fits the request pretty well:
rm c[^s]*
The [^s]
matches exactly one character other than s
(including uppercase S
), so the overall pattern will match
c1
, c2
, ca
, clover
, c12
, cS
, c@:,.
, etc,
but not
c
, cs
, cs1
, cs101
, or csience
.
You can find more details in the Bash manual.