Powershell удаляет ряд строк из текстового файла - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть текстовый файл, который содержит

REV#           CUST REV#                                    
BARREL. ADD SLIDE TO CAST THE 1.03 & .413
DIAMETERS TO REV G                               
PART #   LED-4506-X  REF. JOB#  13445   
SHIP:  COLL    SHIP TO ADDRESS: SEE PO
QUESTIONER: NO  Penalty:  NO  QTY: 1
DUE DATE: 12/28/18       
P.O. TOTAL AMOUNT $1.00     TERMS: N/30
QUOTE: WRITTEN PULLED: YES 
HOURS:  100     MATERIAL: 1,000.00     RATE:    82
TYPE: DIDI   FOREMAN:    MP    SALESPERSON: RO      
DETAILS:   YES  / ENG     GANTT CHART:      YES    

Мне нужно удалить все после SHIP

Я знаю, что могу удалить каждую строку с чем-то вроде этого

(Get-Content C:\MyFile.txt) |
Where { $_ -notmatch "SHIP" } |
Where { $_ -notmatch "QUESTIONER:" } |
Where { $_ -notmatch "DUE DATE:" } |
Where { $_ -notmatch "P.O." }|
Where { $_ -notmatch "QUOTE:" }|
Where { $_ -notmatch "HOURS:" }|
Where { $_ -notmatch "TYPE:" }|
Where { $_ -notmatch "DETAILS:" }|
Set-Content C:\MyFile.txt

Но время от времени у меня будут случайные строки данных, которые мне нужно будет удалить, а также произнесите строку

REV#           CUST REV#                                    
BARREL. ADD SLIDE TO CAST THE 1.03 & .413
DIAMETERS TO REV G                               
PART #   LED-4506-X  REF. JOB#  13445   
SHIP:  COLL    SHIP TO ADDRESS: SEE PO
QUESTIONER: NO  Penalty:  NO  QTY: 1
DUE DATE: 12/28/18,
12/29/18,
12/30/18         
P.O. TOTAL AMOUNT $1.00     TERMS: N/30
QUOTE: WRITTEN PULLED: YES 
HOURS:  100     MATERIAL: 1,000.00     RATE:    82
SOME OTHER INFORMATION
TYPE: DIDI   FOREMAN:    MP    SALESPERSON: RO      
DETAILS:   YES  / ENG     GANTT CHART:      YES   

Где будут дополнительные даты или другая информация, указанная выше.код не поймаешь.Как я могу сделать диапазон строк от SHIP до конца файла?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Если желаемый контент всегда находится в первых 4 строках, вы можете просто сделать это:

(Get-Content C:\file.txt)[0..3] | set-content C:\outfile.txt
0 голосов
/ 14 декабря 2018

Попробуйте выполнить следующее (убедитесь, что у вас есть резервная копия C:\MyFile.txt, если вы перезаписываете файл на месте):

((Get-Content -Raw C:\MyFile.txt) -csplit '\r?\nSHIP:')[0] |
  Set-Content C:\MyFile.txt

При этом файл будет полностью прочитан Get-Content -Raw, а затемразбивает (-csplit, с учетом регистра) полученную многострочную строку на строку, начинающуюся с SHIP:

Следовательно, 1-й элемент результирующего массива ([0]) является содержимым файла докроме строки SHIP:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...