Eu tenho uma string no próximo formato
id;some text here with possible ; inside
e deseja dividi-lo em 2 strings pela primeira ocorrência do ;
. Então, deve ser: id
esome text here with possible ; inside
Eu sei como dividir a string (por exemplo, com cut -d ';' -f1
), mas ela será dividida em mais partes, já que tenho ;
dentro da parte esquerda.
bash
shell-script
string
split
gakhov
fonte
fonte
id
estring
Respostas:
cut
soa como uma ferramenta adequada para isso:Mas
read
é ainda mais adequado:fonte
read
que estou usandobash
. Obrigado @manatwork!cut
abordagem só funcionará quando "$ s" não contiver caracteres de nova linha. read está em qualquer shell tipo Bourne. <<< está nas versões rc, zsh e recentes do bash e ksh93 e é o que não é padrão.-a
por algum motivo ao mencionarbash
éread
. (Evidentemente não serve aqui.)-f 2-
nostring="$( cut -d ';' -f 2- <<< "$s" )"; echo "$string"
comando. Isso é o que ignora o restante dos delimitadores na sequência de caracteres para a impressão. Não é óbvio quando se olha para a página de manual decut
Com qualquer sh padrão (incluindo bash):
read
as soluções baseadas funcionariam para valores de caractere único (e com alguns shells, byte único)$sep
que não sejam espaço, tabulação ou nova linha e somente se$s
não contiver caracteres de nova linha.cut
soluções baseadas só funcionariam se$s
não contiver caracteres de nova linha.sed
Poderiam ser criadas soluções para lidar com todos os casos de canto com qualquer valor de$sep
, mas não vale a pena ir tão longe quando houver suporte embutido no shell para isso.fonte
Como você mencionou que deseja atribuir os valores a id e string
primeiro atribua seu padrão a uma variável (diga str)
Agora você tem seus valores nas respectivas variáveis
fonte
some_command
, então o seu padrão ficarão armazenados no $ 1 e usar o código acima, com 1 em vez de strAlém das outras soluções, você pode tentar algo com
regex
base:ou dependendo do que você está tentando fazer exatamente, você pode usar
onde
\1
e\2
conter os dois substrings que você estava querendo.fonte
Solução no bash padrão:
fonte