StarJedi
StarJedi

Reputation: 1520

How to use sed to extract numbers from a comma separated string?

I managed to extract the following response and comma separate it. It's comma seperated string and I'm only interested in comma separated values of the account_id's. How do you pattern match using sed?

Input: ACCOUNT_ID,711111111119,ENVIRONMENT,dev,ACCOUNT_ID,111111111115,dev

Expected Output: 711111111119, 111111111115

My $input variable stores the input

I tried the below but it joins all the numbers and I would like to preserve the comma ','

echo $input | sed -e "s/[^0-9]//g"

Upvotes: 0

Views: 969

Answers (2)

Ed Morton
Ed Morton

Reputation: 203169

$ awk '
BEGIN {
    FS = OFS = ","
}
{
    c = 0
    for (i = 1; i <= NF; i++) {
        if ($i == "ACCOUNT_ID") {
            printf "%s%s", (c++ ? OFS : ""), $(i + 1)
        }
    }
    print ""
}' file
711111111119,111111111115

Upvotes: 1

Quas&#237;modo
Quas&#237;modo

Reputation: 4004

I think you're better served with awk:

awk -v FS=, '{for(i=1;i<=NF;i++)if($i~/[0-9]/){printf sep $i;sep=","}}'

If you really want sed, you can go for

sed -e "s/[^0-9]/,/g" -e "s/,,*/,/g" -e "s/^,\|,$//g"

Upvotes: 3

Related Questions