Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

336
Views
¿Cómo eliminar una línea si una línea contiene un valor vacío después del símbolo = usando powershell o Javascript?

¿Cómo eliminar una línea si una línea contiene un valor vacío después del símbolo = usando powershell o Javascript?

Mi valor de entrada es

 variable1 = value1 variable2 = value2 variable3 = variable4 = value4 variable5 =

los valores pueden cambiar. Estoy buscando un script que elimine líneas si el valor está vacío después del símbolo =.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Parece que está tratando de modificar un archivo .INI y, al hacerlo, puede arruinar la inicialización de algunas aplicaciones.

Habiendo dicho eso, en PowerShell puedes hacer:

  1. al cargar desde un archivo de texto
 $result = Get-Content -Path 'X:\theInputFile.txt' | Where-Object { $_ -match '^\w+\s*=\s*\S+' }
  1. al analizar una cadena multilínea
 $string = @' variable1 = value1 variable2 = value2 variable3 = variable4 = value4 variable5 = '@ $result = $string -split '\r?\n' | Where-Object { $_ -match '^\w+\s*=\s*\S+' }

La variable $result será una matriz de cadenas:

 variable1 = value1 variable2 = value2 variable4 = value4

Puede guardar eso en (un nuevo) archivo usando

 $result | Set-Content -Path 'X:\theNewInputFile.txt'

Detalles de expresiones regulares:

 ^ Assert position at the beginning of the string \w Match a single character that is a “word character” (letters, digits, etc.) + Between one and unlimited times, as many times as possible, giving back as needed (greedy) \s Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) * Between zero and unlimited times, as many times as possible, giving back as needed (greedy) = Match the character “=” literally \s Match a single character that is a “whitespace character” (spaces, tabs, line breaks, etc.) * Between zero and unlimited times, as many times as possible, giving back as needed (greedy) \S Match a single character that is a “non-whitespace character” + Between one and unlimited times, as many times as possible, giving back as needed (greedy)
about 4 years ago · Juan Pablo Isaza Report

0

Para complementar la útil respuesta de Theo , que utiliza un enfoque basado en cmdlet de transmisión, con un enfoque de operador (puro), que es más rápido, pero requiere más memoria (el uso de la memoria generalmente no es una preocupación con los archivos de texto):

Como señala zett42 , los operadores de comparación como -match actúan como filtros si el operando LHS (entrada) es una matriz , por lo que puede hacer coincidir una expresión regular directamente con una matriz de líneas para obtener la sub-matriz de líneas coincidentes:

 # Filter the lines of file inputFile.txt by returning only those on which # "=" is followed by at least one non-whitespace character ("\S"), # optionally preceded by any number of other characters (".*"). @(Get-Content inputFile.txt) -match '=.*\S'

Puede acelerar la llamada Get-Content agregando -ReadCount 0 .

En cuanto a cuándo usar un enfoque de transmisión frente a un operador puro: consulte la sección sobre compensaciones en esta respuesta .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!