所以我有一个巨大的列表,我在每一行都有一些连续剧。我想删除所有以234
和467
开头的不需要的行。我想使用批处理文件来执行此操作,但如果使用php更容易,我不会介意我。
072345678
072567863
234567832
467890432
072345678
我想用批处理文件删除所有以234
和467
开头的行,这样编辑后的文本文件将保持这样
072345678
072567863
072345678
答案 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
)
)
)