Question

I have a couple of filenames for different languages. I need to grep or sed just the language part. I am using gconftool-2 -R / and want to pipe a command to bring out just the letters with the language.

active = file.so,sv.xml
active = file.so,en_GB.xml
active = file.so,en_US.xml

I need the sv and en_GB part of the file. How can I do that in the most effective way? I am thinking of something like gconftool-2 -R / | sed -n -e '/active =/p̈́' -e '/\.$/' but then I get stuck as I don't know how to print just the part I need and not the whole line.

Was it helpful?

Solution

How about using simple cut

cut -d. -f3 filename

Test:

[jaypal:~/Temp] cat filename
active = file.so.sv.xml
active = file.so.en_GB.xml
active = file.so.en_US.xml

[jaypal:~/Temp] cut -d. -f3 filename
sv
en_GB
en_US

Based on the updated input:

[jaypal:~/Temp] cat filename
active = file.so,sv.xml
active = file.so,en_GB.xml
active = file.so,en_US.xml

[jaypal:~/Temp] cut -d, -f2 filename | sed 's/\..*//g'
sv
en_GB
en_US

OR

Using awk:

[jaypal:~/Temp] awk -F[,.] '{print $3}' filename
sv
en_GB
en_US

[jaypal:~/Temp] awk -F[,.] '{print $(NF-1)}' filename
sv
en_GB
en_US

OR

Using grep and tr:

[jaypal:~/Temp] egrep -o ",\<.[^\.]*\>" f | tr -d ,
sv
en_GB
en_US

OTHER TIPS

awk -F. '{print $(NF-1)}'

NF is the number of fields, awk counts from 1 so the 2nd to last field is NF-1.
The -F. says that fields are separated by "." rather than whitespace

awk would be my main tool for this task but since that has already been proposed, I'll add a solution using cut instead

cut -d. -f3

i.e. use . as delimiter and select the third field.

Since you tagged the question with bash, I'll add a pure bash solution as well:

#!/usr/bin/bash 

IFS=.

while read -a LINE;
do
    echo ${LINE[2]}
done < file_name

Try:

gconftool-2 -R / | grep '^active = ' | sed 's,\.[^.]\+$,,; s,.*\.,,'

The first sed command says to remove a dot followed by everything not a dot until the end of line; the second one says to remove everything until the last dot.

This might work for you:

gconftool-2 -R / | sed -n 's/^active.*,\([^.]*\).*/\1/p'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top