![Como remover o texto antes do delimitador?](https://rvso.com/image/168776/Como%20remover%20o%20texto%20antes%20do%20delimitador%3F.png)
Preciso de ajuda para remover texto antes );
e depois |
dos delimitadores em todas as linhas de um arquivo de texto. Ou seja:
SUBSCIBER_MSISDN=6289666195060');BEGIN DBMS_LOCK.SLEEP(5); END-- rKSy|
E o resultado deveria ser assim
SUBSCIBER_MSISDN=6289666195060|
Alguma ideia de como remover essa parte? É um arquivo grande.
Eu vou enlouquecer se precisar usar sed
.
Responder1
Supondo que o que você está mostrando seja uma linha completa de algum arquivo de entrada:
sed "s/'.*/|/" file >newfile
Isso substituiria tudo após o primeiro '
caractere de cada linha por um |
caractere. O resultado seria gravado em um novo arquivo por meio de um redirecionamento. Estou usando aspas duplas em torno da sed
expressão, pois uma string entre aspas simples nunca pode conter um caractere de aspas simples.
Dados os dados de exemplo, isso produziria
SUBSCIBER_MSISDN=6289666195060|
Se você também deseja remover espaços em branco do início da linha (seu exemplo parece fazer isso):
sed -e "s/'.*/|/" -e 's/^[[:blank:]]*//' file >newfile
ou,
sed "s/'.*/|/; s/^[[:blank:]]*//" file >newfile
Se você tem aversão a sed
, você pode empregar awk
para fazer exatamente a mesma transformação:
awk '{ sub("'"'"'.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile
A aparência descolada '"'"'
é uma citação simples. Deve estar entre aspas duplas fora da string entre aspas simples que constitui o awk
código. Também poderíamos usar '\''
, ou seja
awk '{ sub("'\''.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile
Ou você pode usar o código ASCII octal para o caractere de aspas simples:
awk '{ sub("\047.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile