Php 从以“开始”的文本文件中删除不需要的行;abc";或;fgh";
所以我有一个巨大的列表,每行都有一些连续剧。我想删除所有不需要的以Php 从以“开始”的文本文件中删除不需要的行;abc";或;fgh";,php,windows,batch-file,text,str-replace,Php,Windows,Batch File,Text,Str Replace,所以我有一个巨大的列表,每行都有一些连续剧。我想删除所有不需要的以234和467开头的行。我想使用批处理文件来实现这一点,但如果使用php更简单,我也不会介意 072345678 072567863 234567832 467890432 072345678 我想用批处理文件删除以234和467开头的所有行,因此编辑的文本文件将保持如下状态 072345678 072567863 072345678 $text="072345678 072567863 234567832 467890432
234
和467
开头的行。我想使用批处理文件来实现这一点,但如果使用php更简单,我也不会介意
072345678
072567863
234567832
467890432
072345678
我想用批处理文件删除以234
和467
开头的所有行,因此编辑的文本文件将保持如下状态
072345678
072567863
072345678
$text="072345678
072567863
234567832
467890432
072345678";
echo preg_replace('#^(234|467)([0-9]+)$#ims', '', $text);
使用findstr。它允许正则表达式(使用
/R
)。克拉(^
)与行首匹配/V
过滤掉匹配的行(而不是过滤掉不匹配的行)
在php中,您可以使用如下内容
072345678
072567863
072345678
$text="072345678
072567863
234567832
467890432
072345678";
echo preg_replace('#^(234|467)([0-9]+)$#ims', '', $text);
文件\u获取\u内容以包含数据,然后分解,在pregreplace上foreach和if以不添加空行,但使用shell命令更快,这很可能对您有效
$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));
有很多解决方案,看看以前的帖子:在批处理中,您可以这样做:
@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
)
)
)
请分享您尝试过的内容。我尝试过使用它,但它不起作用。ren myFile.txt myFile.txt.old findstr/v/b/c:“blabla”myFile.txt.old>myFile.txt
@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
)
)
)