У меня есть строка в следующем формате
id;some text here with possible ; inside
и хочу разделить его на 2 строки по первому появлению ;
. Итак, должно быть: id
иsome text here with possible ; inside
Я знаю, как разбить строку (например, с помощью cut -d ';' -f1
), но она будет разбита на несколько частей, так как у меня ;
внутри левая часть.
bash
shell-script
string
split
Гахов
источник
источник
id
аstring
Ответы:
cut
звучит как подходящий инструмент для этого:Но
read
еще более подходит:источник
read
так как я используюbash
. Спасибо @manatwork!cut
Подход будет работать только когда «$ s» не содержит символов новой строки. читать можно в любой борноподобной оболочке. <<< находится в rc, zsh и последних версиях bash и ksh93 и является нестандартной.-a
по какой-то причине, когда упоминалbash
оread
. (Очевидно, здесь бесполезно.)-f 2-
вstring="$( cut -d ';' -f 2- <<< "$s" )"; echo "$string"
команде. Это то, что игнорирует остальные разделители в строке для распечатки. Не очевидно при взгляде на справочную страницуcut
С любым стандартным sh (включая bash):
read
основанные решения будут работать для односимвольных (и с некоторыми оболочками, однобайтовыми) значений,$sep
отличных от пробела, табуляции или новой строки, и только если$s
они не содержат символов новой строки.cut
основанные решения будут работать, только если$s
не содержат символов новой строки.sed
Могут быть разработаны решения, которые обрабатывают все угловые случаи с любым значением$sep
, но не стоит заходить так далеко, когда для этого есть встроенная поддержка в оболочке.источник
Как вы упомянули, вы хотите присвоить значения идентификатору и строке
сначала присвойте свой шаблон переменной (скажем, str)
Теперь у вас есть значения в соответствующих переменных
источник
some_command
, тогда ваш шаблон будет храниться в $ 1 и использовать вышеуказанный код с 1 вместо strВ дополнение к другим решениям, вы можете попробовать что-то на
regex
основе:или в зависимости от того, что вы пытаетесь сделать точно, вы можете использовать
где
\1
и\2
содержат две подстроки, которые вы хотели.источник
Решение в стандартном bash:
источник