I have string like
name1::1.1.1.1::ps -ax
I want to split the string based on delimiter :: using bash scripting.
The desired output should be an array of 3 elements
("name1" "1.1.1.1" "ps -ax")
without double quotes
I appreciate your help.
I have string like
name1::1.1.1.1::ps -ax
I want to split the string based on delimiter :: using bash scripting.
The desired output should be an array of 3 elements
("name1" "1.1.1.1" "ps -ax")
without double quotes
I appreciate your help.
 
    
     
    
    Assuming there are no :s in the array data, use bash pattern substitution to squeeze the :: to : while assigning the string to $array, then show the whole array, then just element #2:
a="name1::1.1.1.1::ps -ax"
IFS=: array=(${a//::/:}) ; echo ${array[@]} ; echo "${array[2]}" 
Output:
name1 1.1.1.1 ps -ax
ps -ax
But what if there are :s in the array data?  Specifically in the third field, (the command), and only in that field.  Use read with dummy variables to absorb the extra :: separators:
a="name1::1.1.1.1::parallel echo ::: 1 2 3 ::: a b"
IFS=: read x a y b z <<< "$a"; array=("$x" "$y" "$z"); printf "%s\n" "${array[@]}"
Output:
name1
1.1.1.1
parallel echo ::: 1 2 3 ::: a b
 
    
    The only safe possibility is use a loop:
a='name1::1.1.1.1::ps -ax'
array=()
a+=:: # artificially append the separator
while [[ $a ]]; do
    array+=( "${a%%::*}" )
    a=${a#*::}
done
This will work with any symbol in a (spaces, glob characters, newlines, etc.)
 
    
    i=0                                                                            
string="name1::1.1.1.1::ps -ax"                                                
echo "$string" | awk 'BEGIN{FS="::";OFS="\n"}{$1=$1;print $0}'>tempFile            
while read line;                                                               
do                                                                             
  arr["$i"]="$line"                                                                  
  i=$(expr $i + 1)                                                              
done<tempFile                                                                  
echo "${arr[@]}"                                                                
echo "${arr[0]}"                                                                
echo "${arr[1]}"                                                                
echo "${arr[2]}"
Output:
sh-4.4$ ./script1.sh
name1 1.1.1.1 ps -ax
name1
1.1.1.1
ps -ax
 
    
     
    
    echo "name1::1.1.1.1::ps -ax" | awk -F"::" '{print $1 $2 $3}'
