3

Is there a way to delete all the characters up to and including the first occurrence of a certain character?

123:abc
12:cba
1234:cccc

and the output would be:

abc
cba
cccc
0

4 Answers 4

5

Using sed:

sed 's/^[^:]*://' file
abc
cba
cccc

Or using awk:

awk -F: '{print $2}' file
abc
cba
cccc
2
  • Won't the first solution cut up to the last occurrence of the character? And the second solution cuts from 1st to 2nd (if any)? Commented Oct 28, 2022 at 7:11
  • I have included generated output also. sed removes from start 0 or more of any chars that are not a : and then a :
    – anubhava
    Commented Oct 28, 2022 at 7:22
2

If the data is in a variable, you can use parameter expansion:

$ var=123:abc
$ echo ${var#*:}
abc
$

The # means to remove the shortest pattern of *: (anything followed by a colon) from the front of the string, as you said in your requirement "delete all the characters up to the first occurrence of certain character + that character", not to get the second field where the delimiter is the colon.

1

You could use cut:

$ cut -d":" -f2- myfile.txt 
0
1

use awk

echo "123:abc" | awk -F ":" '{print $2}'
  • -F means to use : as the separator to split the string.
  • {print $2} means to print the second substring.

Not the answer you're looking for? Browse other questions tagged or ask your own question.