Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

317
Visualizações
Rgex no funciona con el comando sed como se esperaba

Tengo un archivo de texto que contiene:

25 27 50

B 35 75

C 75 78

D 99 88 76

Quería eliminar la línea que no tiene el cuarto campo (el cuarto par de dígitos). Rendimiento esperado :

25 27 50

D 99 88 76

Sé que el comando awk sería la mejor opción para tal tarea, pero me pregunto cuál es el problema con mi comando sed , ya que debería funcionar como puede ver a continuación:

 sed -E '/^[ABCD] ([0-9][0-9]) \1$/d' text.txt

Uso de POSIX ERE con referencia inversa (\1) para hacer referencia al patrón anterior entre paréntesis.

He probado este comando en su lugar:

 sed -E '/^[ABCD] ([0-9][0-9]) [0-9][0-9]$/d' text.txt

Pero parece eliminar solo la primera aparición de lo que quiero. Agradecería una mayor explicación de,

  • por qué la referencia inversa no funciona como se esperaba.
  • ¿Cuál es el problema con la primera aparición en el segundo intento? ¿Debería incluir la opción global en caso afirmativo? Entonces, ¿cómo? Ya que intenté agregarla al final junto con /d (para eliminar) pero no funcionó.
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Mucho, mucho más fácil con awk :

 awk 'NF == 4' file A 25 27 50 D 99 88 76

Este comando awk usa un separador de campo predeterminado de espacio o tabulación y verifica una condición NF == 4 para asegurarse de que imprimamos líneas con solo 4 campos.


Con sed sería (suponiendo que no haya espacios iniciales ni finales en cada línea):

 sed -nE '/^[^[:blank:]]+([[:blank:]]+[^[:blank:]]+){3}$/p' file A 25 27 50 D 99 88 76
over 4 years ago · Santiago Trujillo Relatório

0

Con sus muestras mostradas en el programa sed , puede intentar seguir. Escrito y probado en GNU sed .

 sed -nE '/^([^[:space:]]+[[:space:]]+){3}[^[:space:]]+$/p' Input_file

Explicación: simplemente detener la impresión de líneas mediante la opción -n de sed . Luego usando -E para usar ERE en el programa. En el programa principal, use expresiones regulares para hacer coincidir desde el inicio sin espacio (1 o más ocurrencias) seguido de espacios (1 o más ocurrencias) y este combo 3 veces (para hacer coincidir 3 campos básicamente) que es seguido por no espacios 1 o más ocurrencias hasta final del valor de la línea, si esta expresión regular coincide, imprima esa línea.

over 4 years ago · Santiago Trujillo Relatório

0

Esto podría funcionar para usted (GNU sed):

 sed -En 's/\S+/&/4p' file

Desactive la impresión implícita -n y active la expresión regular extendida -E .

Sustituya el cuarto campo por sí mismo e imprima el resultado.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda