Moony
Moony

Reputation: 13

How to remove last part of a string with different length in bash

I am trying to collect the lines from a file which doesn't start with a # as its first caracter. I have this code I am able to get them:

while IFS= read -r line
do
    [[ -z "$line" ]] && continue
    [[ "$line" =~ ^# ]] && continue
     #echo "LINEREADED: $line"
done < $file

So the output I have is something like this:

modules/core_as/xxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxx [100]

My question is how can I get only the string without the [100]?

I know there is some commands like sed or trim but the problem is that the string is not always that length, sometimes is different like:

cross_modules/core_as/xxxx/xxxxxxxxx [100-103]

or

cross_modules/core_as/xxxxxxxxxxxx/xxxxxxxxx [100-103]

or anything like that...

And in all this cases I only need the string without the [....] and without the last blank space at the end of last x, whichever the length of the string is, like cross_modules/core_as/xxxxxxxxxxxx/xxxxxxxxx

echo ${caseReaded:1:${#caseReaded}-7} 

This also do the job but is not generic for any length.

Does anyone knows how I can get this?

Upvotes: 0

Views: 96

Answers (3)

Ted Lyngmo
Ted Lyngmo

Reputation: 117298

grep to match all lines not starting with # and then display the first field using cut, which works if the first field doesn't contain spaces:

grep -v ^# "$file" | cut -f1 -d' '

If the thing before [100] contains spaces, this may be the way to go:

grep -v ^# "$file" | sed -E 's/^(.*) .*$/\1/'

The last one works because the .* match in sed is greedy so only the last space will be left to match the outer condition .*$.

Upvotes: 0

Gilles Qu&#233;not
Gilles Qu&#233;not

Reputation: 185025

If the spaces are only before [:

while IFS= read -r line _
do
    [[ -z $line ]] && continue
    [[ $line =~ ^# ]] && continue
done < "$file"

Upvotes: 0

on8tom
on8tom

Reputation: 1894

You can strip a certain part of a string in bash

echo "${line% [*}"
cross_modules/core_as/xxxx/xxxxxxxxx
modules/core_as/xxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxx
cross_modules/core_as/xxxxxxxxxxxx/xxxxxxxxx

Upvotes: 1

Related Questions