• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

254
Views
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ó.
about 3 years ago · Santiago Trujillo
3 answers
Answer question

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
about 3 years ago · Santiago Trujillo Report

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.

about 3 years ago · Santiago Trujillo Report

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.

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error