Обработка строк

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

Я хочу избавиться от <string> и </string>

Как я могу сделать это?

На данный момент я получил это:

var=${var:9:4}

1.11
1
задан 19 June 2016 в 08:37

3 ответа

Вы могли использовать sed для обработки строк:

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

возвраты

$var =  1.11 

Объяснение 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
     \1                      # replacement string (\1 means "whatever is matched between the () before")
   /g'                       # apply replacement globally (in case it occurs multiple times in the string)
2
ответ дан 7 December 2019 в 12:39

Я использую другое решение:

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

То, что я сделал, определяло > и < как разделители и печать определенных полей между разделителями.

1
ответ дан 7 December 2019 в 12:39

Bash имеет также свои собственные регулярные выражения. Однако они не так мощны как в sed. Следующий код делает волшебство, не называя внешние программы:

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

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

#echo $first
echo $second

Я пытался сделать это за один шаг также, но не успешно выполнялся, потому что регулярные выражения удара не поддерживают нежадные регулярные выражения. Я попробовал что-то вроде этого:

${var//<*>}

Код удаляет все сначала < к последнему >. :(

Я уверен, что это может быть сделано за один шаг с

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

но у меня нет времени для экспериментирования прямо сейчас. Для получения дополнительной информации смотрите здесь: http://www.tldp.org/LDP/abs/html/string-manipulation.html

0
ответ дан 7 December 2019 в 12:39

Другие вопросы по тегам:

Похожие вопросы: