2012-02-17 5 views
0

У меня есть текстовый файл как:Удаление строки в текстовом файле после определенного ключевого слова

sample text1 
sample text2 
sample text3 

и мне нужно, чтобы это было:

sample 
sample 
sample 

В принципе, мне нужно, чтобы удалить всю строку после данной фразы в этом случае ключевое слово «sample»

Может кто-нибудь мне помочь? Я бы предпочел VBScript или что-то stanalone и я могу сделать партию для этого

С уважением,

+0

Всегда ли начинать каждую строку с "образцом"? Или это может быть где-то в тексте? –

+0

Нет, это может быть где угодно в строке – user1215682

+0

Вы хотите проверить строку за строкой? – Amol

ответ

0

Это будет работать внутри CMD-или BAT-файл:

for /f "tokens=1" %%i in ('type file1') do @echo %i >> file2 
+0

Привет, это работает достаточно хорошо, кроме одного, у меня не всегда есть те же разделители. Мне нужен один скрипт, который будет строго искать только ключевое слово внутри строки и удаляет остальную часть строки после этого слова. – user1215682

0

Так как вы пометили свои вопрос с PowerShell, я дам вам решение в PowerShell:

$target='sample' 
foreach ($line in gc .\foo.txt){$line.substring(0,$target.length)|out-file -append bar.txt} 

Я предполагаю, что каждая строка начинается с «образцом».

Если "образец" текст в любом месте строки, это должно работать:

$target='sample' 
foreach ($line in gc .\foo.txt){$line.substring(0,$line.indexof($target)+$target.length)|out-file -append bar.txt} 
+0

проблема в том, что ключевое слово может быть в любом месте на линии, если это был первый ваш скрипт был идеальным – user1215682

+0

Добавлена ​​вторая версия, теперь она должна работать с шаблоном в любой точке строки –

+0

Все в порядке, спасибо! – user1215682

2

(Get-Content sample.txt) -replace, '$ 1' '* образец (+.).' | Out-File sample.txt

+1

Ooops, просто понял, что то, что вы хотите сохранить, - это начало каждой линии. Итак, это должно быть: (Get-Content sample.txt) -replace '(. * Sample). +', '$ 1' | Out-File sample.txt –

+0

Это работает блестяще! – user1215682

0

С Just VBScript, вы можете добиться этого следующим образом

Option Explicit 
Dim oFSO, oTxtFile, sLine ,filePath, cTxtFile 
Const ForReading=1 
Const ForWriting=2 

filePath ="C:\Documents and Settings\Amol\Desktop\Converted\test.txt" 
'' Filepath is your local path to txt file 
Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oTxtFile = oFSO.OpenTextFile(filePath, 1) 
Set cTxtFile = oFSO.CreateTextFile(filePath & ".tmp") 

Do Until oTxtFile.AtEndOfStream 

    sLine = oTxtFile.ReadLine 
    If InStr(sLine,"sample") <> 0 Then 
    sLine = Left(sLine, InStr(sLine,"sample") -1)&"sample" 
    cTxtFile.WriteLine(sLine) 
    End if 

Loop 
oTxtFile.Close 
cTxtFile.Close 
oFSO.DeleteFile(filePath) 
oFSO.MoveFile filePath&".tmp", filePath 
Смежные вопросы