String Manipulation

1
var="<string> 1.11 </string>"

Eu quero me livrar de <string> e </string>

Como posso fazer isso?

Por enquanto eu tenho isso:

var=${var:9:4}

1.11
    
por Pedro Reguenga 17.06.2016 / 15:38

3 respostas

2

Você pode usar sed para manipulação de string:

echo '$var = <string> 1.11 </string>' | sed -r 's/<string>(.*)<\/string>//g'

retorna

$var =  1.11 

Explicação da construção sed :

sed -r                       # call sed with regex-option (-r)
  's/                        # begin of regex (s means "replace, / is the seperator)
     <string>(.*)<\/string>  # construct that should be replaced (the / has to be escaped with \ here)
   /                         # seperator
                           # replacement string ( means "whatever is matched between the () before")
   /g'                       # apply replacement globally (in case it occurs multiple times in the string)
    
por Wayne_Yux 17.06.2016 / 16:02
1

Estou usando outra solução:

echo '$var = <string> 1.11 </string>' | awk -F'> | <' '{print ,}'

O que fiz foi definir > e < como delimitadores e imprimir determinados campos entre os delimitadores.

    
por Yaron 19.06.2016 / 09:17
0

O Bash também tem suas próprias expressões regulares. No entanto, eles não são tão poderosos quanto em sed. O código a seguir faz a mágica sem chamar programas externos:

var="<string> 1.11 </string>"

first=${var#<*>}
second=${first%<*>}

#echo $first
echo $second

Também tentei fazer isso em uma etapa, mas não obtive êxito porque as expressões regulares bash não suportam expressões regulares não-vorazes. Eu tentei algo assim:

${var//<*>}

O código remove tudo, desde o primeiro < até o último > . : (

Tenho certeza de que isso pode ser feito em uma única etapa com

${string/substring/replacement}
${string//substring/replacement}

mas não tenho tempo para experimentar agora. Para mais detalhes, dê uma olhada aqui: link

    
por nobody 19.06.2016 / 08:52