LINUX.ORG.RU

как укоротить слова в файле?

 ,


0

1

есть много скриптов в них _переменные начинающиеся с _

["{_т,_тут}"]  
_тут = _нужна_проверка_конфликта
_или_такими=_неТрололо
["{_т,_ту}"]
_ту = _н
_и=_нт  

цель укоротить без конфликтов слова скриптом перед сборкой

примеры файлов https://github.com/search?q=language%3ASQF+_&type=code

совсем не понимаю sed, и немного bash
помогите хотябы частично

по пунктам

===============================================

_var _var_var_var {["u _t, jj _t2[_tut ]_tut _Nujna;_konflict"_ili_ebobU_uu uu

1.0

наверняка можно все в пунктах 1.1-1.5 сделать 1-2 выражениями но

1.1

если нету символа _ перед [a-zA-Z0-9]+ т.е. любое слово например u uu но не _u_uu перед ними ставится перенос строки
что должно получиться

_var _var_var_var {["
u _t, 
jj _t2[_tut ]_tut _Nujna;_konflict"_ili_ebobU_uu 
uu

1.2

если нету [a-zA-Z0-9]+ перед символом _ делать перенос строки перед _
т.е. _var _var_var_var _ili_ebobU_uu но не _var_var _ebobU_uu
что должно получиться

_var 
_var_var_var {["
u 
_t, 
jj 
_t2[
_tut ]
_tut 
_Nujna;
_konflict"
_ili_ebobU_uu 
uu

1.3

удалить строки начинающиеся не с _ что должно получиться

_var 
_var_var_var {["
_t, 
_t2[
_tut ]
_tut 
_Nujna;
_konflict"
_ili_ebobU_uu 

1.4

после последнего символа [a-zA-Z0-9] удалять все в строке
что должно получиться

_var
_var_var_var
_t
_t2
_tut
_tut
_Nujna
_konflict
_ili_ebobU_uu

1.5

убрать повторяющиеся переменные _tut но не _var_var_var
что должно получиться

_var
_var_var_var
_t
_t2
_tut
_Nujna
_konflict
_ili_ebobU_uu

это будет массив для 2.1

2.1

bash, могу сам написать и укоротить переменные
но вопросы по sed
в оригинале изменить слова из массива полученные в 1.5 наподобие _var но так чтобы не изменились _var_var_var например на _v
т.е. похоже на 1.2 но проверка, только если перед переменной например _var нет [a-zA-Z0-9]+ изменять _var на _v
должно получиться

_v _va {["u _t, jj _t2[_tu ]_tu _N;_k"_i uu


Последнее исправление: nanosecond (всего исправлений: 12)

Ответ на: комментарий от nanosecond

ЛОР он как молоток и микроскоп.
Нужно лишь знать когда уместен молоток и когда микроскоп …

anonymous
()
Ответ на: комментарий от fernandos

i/o wait

Удивительно, часто встречается на серверах. Господин @mord0d прав?

Опять я виноват, разоблачил бедного халявщика. ☹

А вообще оно везде встречается, всё зависит от нагрузки. Но нагрузка обычно… в общем, вы поняли. ☺

Я бы подсказал, но

здесь не могу продолжить

Как можно подсказать с тем, о чём не имеешь ни малейшего представления, да? ☺ Всё чаще набигают «Помогите с проблемой, но в чём она заключается я не скажу!»

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Как можно подсказать с тем, о чём не имеешь ни малейшего представления, да

Ну кончено же. Сам факт того, что переменные он хочет сделать короче ещё хоть как-то понятен, но как, зачем и почему — история умалчивает.

fernandos ★★★
()
Ответ на: комментарий от fernandos

но как, зачем и почему

Он сам спрашивает как, потому нам остаётся только зачем и почему (а главное — зачем). ☺ А вот то что он не задаётся вопросом почему — очень опасный момент!

mord0d ★★★★★
()

i/o wait

это сарказм

в теме все есть и даже больше
не надо мне тут заливать свое говно о альтруизме и добродетели
если вы такие были то не накручивали бы цену понтам
а тихо скромно решили бы месcедж с i/o wait

nanosecond
() автор топика

надо _переменные из файла в bash массив получить

nanosecond
() автор топика
Ответ на: комментарий от mord0d

разоблачил бедного халявщика

гегой похулил в небо и против ветра всех унывающих спас
я вас не обвиняю

nanosecond
() автор топика
Ответ на: комментарий от nanosecond

лор это нелюди)

Вы хотите, чтобы вам помогли написать скрипт, который из файла извлекает идентификаторы, а в скрипте насколько понял вы хотите сделать алиасы более короткие для удобства.
Где пример скрипта и файла?

anonymous
()
Ответ на: комментарий от anonymous

помогли написать скрипт

Нет, он хочет чтобы его за него написали. Полностью.

Где пример скрипта и файла?

Он уже писал выше что примеров не будет и он ничего делать даже не пытался.

mord0d ★★★★★
()
Ответ на: комментарий от anonymous

хочу в скрипте полученные переменные укоротить
проверить укороченные переменные на конфликт, т.е. чтобы если уже есть такие переменные сделать ее длиннее в скрипте
в случае отсутствия конфликта изменить файл

nanosecond
() автор топика

неважно укорачивать в bash тоже не умею

nanosecond
() автор топика
Ответ на: комментарий от nanosecond

хочу в скрипте полученные переменные укоротить …

Вы согласны с тем, что тому кто вам будет помогать нужен пример исходного файла и скрипта?
Не имея примеров как можно вам помочь?

anonymous
()
Ответ на: комментарий от mord0d

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

nanosecond
() автор топика
Ответ на: комментарий от nanosecond

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

А вот зря.
Он как раз в этих вопросах хорошо разбирается и мог бы помочь …

anonymous
()
Ответ на: комментарий от nanosecond

Расскажу вам немного о нечетком поиске …

В давние времена у меня была одна хорошая шабашка.
В двух шкафах были горы рукописных толстенных бухкниг, в которых находились сведения о всей магистрали газопроводов города.
А эти трубы то являются основными фондами и их нужно начислять амортизацию.

Как один быстро справился с задачей переноса этих данных в компьютер?

Разработал хороший алгоритм нечеткого поиска.
Например для ввода текста «Разработал хороший алгоритм нечеткого поиска» в компьютер достаточно было ввести

Рбл хшй агм нчго пка

Все!
Алгоритм производил поиск в базе слов подходящие и возвращал результат.

Данные из двух шкафов книг были перенесены в компьютеры и а-ля улю

И амортизация правильно начислялась и отчеты нужные бухгалтерам  были разработаны и   

я остался не в накладе


Как говорил великий грешник Ленин /имя произошло от слова Лень/ нужно  

Учиться, учиться и учиться

anonymous
()

Напиши простую программку с использованием sscanf и всё. Никаких башей, седов и прочего шлака. (шлака в том смысле что на них будет ужос, а на С будет коротко ясно и быстро.)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)

ладно «евреи» вот задачка попроще как все кроме _переменных удалить из файла и разделить пробелом

nanosecond
() автор топика
Ответ на: комментарий от anonymous

хорошо разбирается

Ты мне льстишь, анон. ☺

Я написал парсер конфига (формат которого тоже пришлось изобретать на ходу) на sh+sed+awk, но я уверен что можно лучше. Работает безотказно, но хорошо ли работает? Наверняка можно ускорить алгоритм, а может и потребление памяти снизить (хотя на фоне рантайма самих sh+sed+awk данные занимают немного, но всё же).

Разница в том что я пытаюсь решить задачи, а топикстартер — ждун. Опыт приходит с практикой, а не с готовыми решениями. Так что я не хорошо разбираюсь, я просто стараюсь разобраться.

mord0d ★★★★★
()
Ответ на: комментарий от nanosecond

«Казнить нельзя помиловать.»

// В твоём случае запятую лучше поставить после первого слова.

сам хочу понять и научиться

Что-то не заметно.

с миру по нитке

Я ж и говорю — халявщик!

mord0d ★★★★★
()
Ответ на: комментарий от nanosecond

забанься

А ты себя кем возомнил?

Мне за бессмысленные споры (с тобой, да) снимут скор, тебя забанят за тупняк.

Ну и всё же я настаиваю чтобы ты изучил язык, на котором пытаешься писать. Именно пытаешься. Этот набор слов невозможно понять.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

не надо меня с кем-то там сравнивать

я настаиваю

а я рекомендую

nanosecond
() автор топика

сложно написать sed в два правила
не могу понять как
1 удалить все символы кроме _(любая буква или цафра или _) и добавить с двух сторон пробелы
2 заменить все пробелы на один пробел

потом это хочу считать башем

nanosecond
() автор топика
Ответ на: комментарий от mord0d

Я написал парсер конфига (формат которого тоже пришлось изобретать на ходу) на sh+sed+awk, но я уверен что можно лучше.

Ныне Perl не использую, а ранее частенько.
Парсер конфига на нем разработать «самое то», хотя конечно возможности его на порядки больше …

anonymous
()

может из такой команды можно слепить что-то для себя:

for f in *.txt; do mv -- "$f" "${f%.txt}"; done
#Удалить у всех файлов и папок расширение .txt в текущей папке

Gennadevich
()
Ответ на: комментарий от anonymous

Perl уже нет в базовой системе FreeBSD. Я ограничен в средствах конкретно в этой задаче.

mord0d ★★★★★
()

только до этого догадался, не могу понять как удалить мусор что после
cat test | sed 's/_/\n_/g' | grep -E _

_т,
_тут}"]  
_тут = 
_нужна
_проверка
_конфликта
_или
_такими=
_неТрололо

nanosecond
() автор топика

такая недоделка есть, она не умеет _с_двумя и не умеет русский и браузер не умеет тоже, скрипт с мусором вычисляет что после переменной идет
нужно научиться _n_n не разделять и мусор после переменной удалять здесь cat $1 | sed 's/_/\n_/g' | grep -E _
почему wc -m +1 символ больше выдает

#!/bin/bash
# version 0

#find . -maxdepth 1 -name test -exec ./sed.sh {} \;

#IFS=$'\n'

blacklist=( "_" )

readarray array < <(cat $1 | sed 's/_/\n_/g' | grep -E _ )


for v in "${array[@]}"
do
	blacklist+=( $v )

	tmp=$(echo $v | wc -m)
	# wc \u043f\u043e\u0447\u0435\u043c\u0443\u0442\u043e \u043d\u0430 +1 \u0441\u0438\u043c\u0432\u043e\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u0434\u0430\u0435\u0442
	let tmp--
	# \u043f\u043e\u0442\u0443\u0447\u0442\u043e _2 \u0441\u0438\u043c\u0432\u043e\u043b\u0430
	for ((i=2; i<$tmp; i++))
	do
		newvar=$(echo $v | cut -c 1-$i)
		if [[ ! " ${blacklist[@]} " =~ " $newvar " ]]; then
			if [[ ! " ${array[@]} " =~ " $newvar " ]]; then
				echo $newvar
				# \u0442\u0443\u0442 \u043d\u0443\u0436\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435
				blacklist+=( $newvar )
				i=$tmp
			fi
		fi
	done

done

nanosecond
() автор топика
Ответ на: комментарий от nanosecond

if [[ ! " ${array[@]} " =~ " $newvar " ]]; then
это лишнее потому-что ранее
blacklist+=( $v )

nanosecond
() автор топика

осталось только научиться _не_разделять_такое и после переменной _удалять=мусор

nanosecond
() автор топика

и русский язык еще

nanosecond
() автор топика

надо было на английском пример писать, сорян

nanosecond
() автор топика
Ответ на: комментарий от nanosecond

если перед _ нет букв, делает перед ней перенос строки
удалит все после букв
оставить строки только с _

во второй строке _ лишняя

nanosecond
() автор топика
Ответ на: комментарий от nanosecond

не работает команда
пытаюсь сделать перенос строки перед буквой если перед ней нет _
sed 's/\([^_][a-zA-Z]\)/\n\1/'

nanosecond
() автор топика

такое

sed: -e expression #1, char 8: unterminated `s' command
#!/bin/bash
# version 0.1
# script ne gotov
# sed: -e expression #1, char 11: unterminated `s' command

#find . -maxdepth 1 -name test3 -exec ./sed.sh {} \;

#IFS=$'\n'

blacklist=( "_" )

# esli pered bukvoi nety _ nehorosho poluchitsya
readarray array < <(cat $1 | sed 's/[^a-zA-Z]\(_\)/\n\1/g' | sed 's/\(.*[a-zA-Z]\).*/\1/' | grep --color=never _ )

for v in "${array[@]}"
do
	blacklist+=( $v )

	tmp=$(printf $v | wc -m)
	for ((i=2; i<$tmp; i++))
	do
		newvar=$(printf $v | cut -c 1-$i)
		if [[ ! " ${blacklist[@]} " =~ " $newvar " ]]; then
			echo $1
			echo $v
			echo $newvar
			sed "s/$v/$newvar/" -i $1
			blacklist+=( $newvar )
			i=$tmp
		fi
	done
done
nanosecond
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.