LinuxForum.Fans
Тема

Правка/поиск текста

Автор: u____11 130 сообщений 25146 просмотров
#359076

Доброго дня, всем!
Есть папка со словарями/энциклопедиями/справочниками необходимыми для быстрого поиска значения слов:
1. Как правильно будет набрать команду, чтобы вывела по абзацам нужное слово без чуствительности регистра и только набранное слово? Т.е., набираю "Год", а вывод должен быть только "Год", "ГОД", "год" без прибавлений "Годный" "ГОДИНА" и т.д. Причем, браться должны только с первого слова абзаца до конца абзаца. Сам набирал команду:

text
grep ^Год ./*

но выводит много лишнего
2. В словарях... много лишних пробелов или ошибок: ВасяПупкин, свет.Было, поехал,который и т.д. Как это исправить? Пробелы пробовал удалить через текстовик, но файлы по 40 Мб сканируются по 3-4 часа на каждую ошибку... Есть ли другой способ исправить файлы?
3. Хотел сделать гуй для вывода найденного для читабельного вида (т.к. в консоли читать для глаз слишком жестоко) и возможностью правки (на основе zenity), но не хватает времени/опыта/знаний... Есть ли у кого какие-нибудь наработки, т.к. в инете ничего не нашел. Есть, правда, GoldenDict и Recoll, но они слишком тяжелы на запуск и выводят слишко много лишнего или требуется подключение к интернету.
Заранее благодарен!

#359116

grep -i "/<год/>"
sed -e 's/[\t ]*/ /g'

/\bгод\b/i
s/\s*/ /

последние два из perl
и вообще если колбасить тексты over100500 мегабайтные. то пора подсаживаться на перл.
самая мощнейшая из мощнейших зе бест ов зе бест поддержка регулярок

#359130
moshell написал:
grep -i "/<год/>"
sed -e 's/[\t ]*/ /g'

/\bгод\b/i
s/\s/ /

Первые две команды зависли на пять минуть, пришлось закрыть терминал. Третья выдала:

text
bash: /bгодb/i: Нет такого файла или каталога

Команду копировал отсюда.

#359133
moshell написал:
последние два из perl

а зависли первые две потому что вы не передали в качестве аргумента пространство расположения файлов


grep -i "\<год\>" где_искать
sed -e 's/[ \t]\+/ /g' где_искать

#359138
moshell написал:
[quote=moshell]последние два из perl

а зависли первые две потому что вы не передали в качестве аргумента пространство расположения файлов[/quote]
Набирал так:

text
grep -i "/<год/>" ./*
#359147
text
gu@moshell:~/perl$ grep -i "^\<RNC_level\>" file
RNC_level rncID;177;from IBIS, as Контроллер (177, 277, 377…);
RNC_level userLabel;RNC01MSK;from IBIS, RNC01MSK, RNC02MSK, RNC03MSK…;
RNC_level mcc;250;;
RNC_level mnc;39;;
RNC_level mncLength;2;;
RNC_level lac;27703;27703;27703;;from IBIS, as Lac (27700, 27701, 27702…);
RNC_level rac;1;1;1;;1;
RNC_level sac;24239;24240;24241;;as cId;
#359148

простите я вас обманул со слешем)


grep -i "^\<год\>" ./*

#359149
moshell написал:
text
gu@moshell:~/perl$ grep -i "^\<RNC_level\>" file

text
grep -i "^\<год\>" ./*
text
grep -i "^\<год\>" Даль

Ничего не выводит

#359153
ПОП написал:
Ничего не выводит
moshell написал:
text
gu@moshell:~/perl$ grep -i "^\<RNC_level\>" file
RNC_level rncID;177;from IBIS, as Контроллер (177, 277, 377…);
RNC_level userLabel;RNC01MSK;from IBIS, RNC01MSK, RNC02MSK, RNC03MSK…;
RNC_level mcc;250;;
RNC_level mnc;39;;
RNC_level mncLength;2;;
RNC_level lac;27703;27703;27703;;from IBIS, as Lac (27700, 27701, 27702…);
RNC_level rac;1;1;1;;1;
RNC_level sac;24239;24240;24241;;as cId;

#359154
text
grep -i ^год ./*

Так выводит все и в разном регистре: Год, ГОД, год... Годик, Годный... ГОДИК, ...

#359158

вот такие управляющие символы как "^" должны быть спрятаны в кавычки.
а границы слов это и есть \< и \>

text
gu@moshell:~/perl$ grep --v
grep (GNU grep) 2.12
Copyright (C) 2012 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl.html>
Это свободное ПО: вы можете продавать и распространять его.
Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.

Авторы программы — Майк Хертель (Mike Haertel) и другие, см. <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

gu@moshell:~/perl$ echo $SHELL /bin/bash

#359164
"moshell" написал:
вот такие управляющие символы как "^" должны быть спрятаны в кавычки.
а границы слов это и есть \< и \>
text
grep -i "^\<год\>" ./*

Но, так ничего не находит?

#359166

значит слова начинаются не в начале строки

#359170
"moshell" написал:
значит слова начинаются не в начале строки
"ПОП" написал:
grep -i ^год ./*

Так выводит все и в разном регистре: Год, ГОД, год... Годик, Годный... ГОДИК, ...
"ПОП" написал:
grep -i "^\<год\>" ./*

Но, так ничего не находит?

Смотрел в файлы: строки/абзацы начинаются с этих слов

#359171

а чо за grep?
версия его

#359172
"moshell" написал:
а чо за grep?
версия его

grep --v

grep (GNU grep) 2.12
Copyright (C) 2012 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или более поздней <http://gnu.org/licenses/gpl.html>.
Это свободное программное обеспечение: вы можете свободно изменять и распространять его.
Программное обеспечение распространяется без гарантии в максимальной степени разрешенной законодательством .

Авторы программы — Майк Хертель (Mike Haertel) и другие, см. <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
#359175

OS: Linux Mint 14 MATE

#359186

подозреваю это кириллица.

#359230

да, так оно и есть. гугл пестрит вопросами про герулярки и кириллицу.
ща придет Док = поможет.

вот кастыль.

ПОП написал:
для быстрого поиска значения слов:

допустим слова в словаре начинаются в начале строки, каким то определенным образом (это можно настроить).
условие - каждое определение слова должно отделяться от остального текста блоком - абзацем. в словаре Ожегова ключевые слова всегда в upcase

gu@moshell:~/perl$ cat words
ГЕН материальный носитель наследственности, единица наследственного материала, определяющая формирование элементарного признака в живом организме

ГЕНИЙ: В древнеримской мифологии:
дух - покровитель человека, позже - вообще олицетворение добрых или злых сил
Добрый г. ”тот, кто помогает кому-н., оказывает на кого-н. благотворное влияние”. Злой г.

ГЕРБ: эмблема государства, города, сословия, рода, изображаемая на флагах, монетах, печатях, государственных и других официальных документах
gu@moshell:~/perl$ cat search
#!/usr/bin/perl -w

use 5.010;
use strict;
use utf8;
use open qw(:std :utf8);

open IN, "<", "words";

my $txt;
my $input;

print "Enter the word\n";

chomp ( $input = <STDIN> );

while (<IN>) {
$txt .= $_
}

$_ = $txt;

if ( /^$input.*?^$/ms ) {
print $&
}


gu@moshell:~/perl$ ./search
Enter the word
ГЕНИЙ
ГЕНИЙ: В древнеримской мифологии:
дух - покровитель человека, позже - вообще олицетворение добрых или злых сил
Добрый г. ”тот, кто помогает кому-н., оказывает на кого-н. благотворное влияние”. Злой г.
gu@moshell:~/perl$

в качетве аргумена ком строки можно привинтить выбираемые файлы где нужно искать

#359283

абалдеть

text
find . -maxdepth 1 -type f -exec grep -io '\(\<\|"\)Год\("\|\>\)' {} \;

"перловводам" - вспомните про все кнопки на клавиатуре (подумайте на досуге)

и еще: Если наши люди вместо водки пьют текиллу - о какой культуре вы ведете разговор (с)

3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной. yars.

Войдите или зарегистрируйтесь, чтобы ответить.