How to get a substring after the last underscore (_) in unix shell script How to get a substring after the last underscore (_) in unix shell script shell shell

How to get a substring after the last underscore (_) in unix shell script


You can do

s='this_is_test_string1_22'

In BASH:

echo "${s##*_}"22

OR using sed:

sed 's/^.*_\([^_]*\)$/\1/' <<< 'this_is_test_string1_22'22

EDIT for sh:

echo "$s" | sed 's/^.*_\([^_]*\)$/\1/'


So puting ideas from anubhava and glenn... Full Shell script can be... as follwoing. you can choose to output to a file or display on the commandline...

#!/bin/ksh#FILE=/paht/to/file.txt or you can pass argument FILE=$1 FILE=$1 counter=`wc -l $FILE |cut  -d " " -f1`x=1while [ $x -le $counter ]    do            REC=`sed -n ${x}p $FILE`            echo " ${REC%_*} and ${REC##*_} " >> output.txt    let x=$x+1done


Using awk:

$ awk 'BEGIN{FS=OFS="_"}{last=$NF;NF--;print $0" "last}' <<EOF> this_is_test_string1_22> this_is_also_test_string12_6> EOFthis_is_test_string1 22this_is_also_test_string12 6