从以“abc”或“fgh”开头的文本文件中删除不需要的行

时间:2014-12-19 18:22:04

标签: php windows batch-file text str-replace

所以我有一个巨大的列表,我在每一行都有一些连续剧。我想删除所有以234467开头的不需要的行。我想使用批处理文件来执行此操作,但如果使用php更容易,我不会介意我。

072345678
072567863
234567832
467890432
072345678

我想用批处理文件删除所有以234467开头的行,这样编辑后的文本文件将保持这样

072345678
072567863
072345678

6 个答案:

答案 0 :(得分:0)

使用findstr。它允许正则表达式(/R)。克拉(^)匹配行的开头。 /V过滤掉匹配的行(而不是过滤掉不匹配的行)。

type yourfile.txt | findstr /R /V "^234" | findstr /R /V "^467"

答案 1 :(得分:0)

在php中你可以使用这样的东西

$text="072345678
072567863
234567832
467890432
072345678";
echo preg_replace('#^(234|467)([0-9]+)$#ims', '', $text);

file_get_contents有数据,然后爆炸,preach在pregreplace上,如果不添加空行,但使用shell命令更快

答案 2 :(得分:0)

这很可能对您有用

$data = file("./foo.txt");
$matches = array('234', '467');
$out = array();

foreach($data AS $line) 
{
   // if not matches 234 OR 467, add to out array
   $pattern = '/^(' . implode('|', $matches) . ')/'; // $pattern = /^(234|467)/
   if(! preg_match($pattern, $string))
   {
       $out[] = $line;
   }
}

// open and lock foofile
$fp = fopen("./foo.txt", "w+");
flock($fp, LOCK_EX);

// rewrite foo with valid content line by line
foreach($out AS $line) 
{
    fwrite($fp, $line);
}
flock($fp, LOCK_UN);
fclose($fp);  

如果您希望对许多文件执行此操作,您始终可以将其转换为函数

function replaceFileData(array $filesList, array $matches)
{
    foreach ($filesList AS $file)
    {
        if (file_exists($file) && ! empty($matches))
        {
            $data = file($file)
            $out  = array();

            foreach($data AS $line) 
            {
               // if not matches 234 OR 467, add to out array
               $pattern = '/^(' . implode('|', $matches) . ')/'; // $pattern = /^(234|467)/
               if(! preg_match($pattern, $string))
               {
                    $out[] = $line;

                    $fp = fopen($file, "w+");
                    flock($fp, LOCK_EX);
                    foreach($out AS $line) 
                    {
                        fwrite($fp, $line);
                    }
                    flock($fp, LOCK_UN);
                    fclose($fp);
               }
            }
        }
    }
}


replaceFileData(array('foo.txt', 'bar.txt'), array(234, 567));

答案 3 :(得分:0)

grep -v ^234 file.txt

grep -v ^467 file.txt

有很多解决方案,请查看以前的帖子:How to delete the rows that start with "C" with awk?

答案 4 :(得分:0)

C:\ type test.txt
072345678
072567863
234567832
467890432
072345678

C:\ findstr /B /V "234 467" test.txt
072345678
072567863
072345678

答案 5 :(得分:0)

批处理你可以这样做:

@echo off
setlocal enableDelayedExpansion

for /f "tokens=*" %%i in (input.txt) do (
    set line=%%i
    set line=!line:~0,3!
    if !line! NEQ 234 (
        if !line! NEQ 467 (
            echo %%i >>out.txt
        )
    )
)