Удалите ненужные строки из текстового файла, начинающегося с & quot; abc & quot; или «fgh»;

Так что у меня огромный список, и у меня есть несколько сериалов в каждой строке. Я хочу удалить все ненужные строки, начинающиеся с 234 а также 467, Я хочу сделать это с помощью командного файла, но мне не будет против, если будет проще с помощью php.

072345678
072567863
234567832
467890432
072345678

Я хочу удалить с помощью командного файла все строки, начинающиеся с 234 а также 467 так отредактированный текстовый файл останется таким

072345678
072567863
072345678

-1

Решение

Используйте findstr. Это позволяет регулярные выражения (с /R). Карат (^) соответствует началу строки. /V отфильтровывает строки, которые совпадают (вместо фильтрации строк, которые не совпадают).

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

Другие решения

в PHP вы можете использовать что-то вроде этого

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

file_get_contents, чтобы иметь данные, затем взорваться, foreach на pregreplace и if, если не добавлять пустые строки, но использование команд оболочки быстрее

0

grep -v ^234 file.txt

grep -v ^467 file.txt

Существует множество решений, взгляните на предыдущие посты: Как удалить строки, начинающиеся с "С" с awk?

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));
0
C:\ type test.txt
072345678
072567863
234567832
467890432
072345678

C:\ findstr /B /V "234 467" test.txt
072345678
072567863
072345678
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
)
)
)
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector