0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 13
1

Что не так с этим скриптом?

23.11.2021, 12:41. Показов 1287. Ответов 16
Метки нет (Все метки)

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

Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
l=""
tmp=""
while IFS= read -r line; do
l=${line}
tmp=$(echo $l | perl -pe 's/\S+\s+\K(\S+)/"*" x length($1)/eg')
res=$res$'\n'$tmp
done
echo -e "${res}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2021, 12:41
Ответы с готовыми решениями:

Что не так с этим скриптом?
<?function get_content($hostname, $path) { $line=""; //станавливаем соединение с узлом...

Какова вероятность, что id, генерируемый этим скриптом совпадёт?
function gen_id($number) { $arr = array('1','2','3','4','5','6','7','8','9','0'); //...

Что-то со скриптом не так?
Надо чтобы при наведении на кнопку появлялась картинка в теге <img>, как правильно написать...

Что не так со скриптом?
Здравствуйте. Написал скрипт для Unity3d, а именно - индикатор ХП. Но с ним что то не так. помогите...

16
123 / 13 / 6
Регистрация: 29.10.2021
Сообщений: 43
23.11.2021, 14:25 2
Здравствуйте .
А что с ним не так ?
Вы же не предлагаете любой скрипт из интернета у себя запускать ?
1
3899 / 1538 / 261
Регистрация: 10.12.2013
Сообщений: 5,258
23.11.2021, 16:54 3
Цитата Сообщение от coolhazker Посмотреть сообщение
Что не так с этим скриптом?
много лишнего

Bash
1
2
#!/usr/bin/env perl -p
s{\S+ \s+ \K \S+} {q[*] x length$&}gex
1
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 13
24.11.2021, 14:10  [ТС] 4
он попросту не выполняет поставленные перед ним задачи

Добавлено через 11 минут
А как именно интегрировать этот элемент в заданный скрипт? Ибо мне с большим трудом видится цельная картина с подключением данной директории.
0
3899 / 1538 / 261
Регистрация: 10.12.2013
Сообщений: 5,258
24.11.2021, 22:10 5
Цитата Сообщение от coolhazker Посмотреть сообщение
Во входящем потоке строк, считываемых со стандартного устройства
ввод, заменить каждое четное слово соответствующим его длине количеством
символов "*"
представленный выше ( пост #3 ) скрипт полностью решает данную задачу. если это считать задачей.


Цитата Сообщение от coolhazker Посмотреть сообщение
цельная картина с подключением данной директории
о какий директории идёт речь ?
0
26 / 53 / 8
Регистрация: 23.11.2021
Сообщений: 354
24.11.2021, 22:16 6
Ты с перловкой поаккуратней, а то эдак и "патч Бармина" запустишь нечаянно…
Чтобы подсчитать длину слова, можно воспользоваться wc -c, но чтобы просто слово заменить на "звездочки", достаточно написать sed 's/./*/g'.
0
3899 / 1538 / 261
Регистрация: 10.12.2013
Сообщений: 5,258
24.11.2021, 22:22 7
Лучший ответ Сообщение было отмечено coolhazker как решение

Решение

файл my_filter
Bash
1
2
#!/usr/bin/env perl -p
s{\S+ \s+ \K \S+} {q[*] x length$&}gex
Bash
1
chmod +x my_filter

Bash
1
echo "слово1 слово2 слово3 слово4 слово5" | my_filter
или так

Bash
1
my_filter file1.txt file2.txt
(заменит в каждой строке файлов file1.txt и file2.txt каждое четное слово соответствующим его длине количеством
символов "*")
0
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 13
24.11.2021, 22:54  [ТС] 8
У меня, наверное, через виртуалку ubuntu скрипт вовсе не работает. Он просто дает поле для ввода.
0
3899 / 1538 / 261
Регистрация: 10.12.2013
Сообщений: 5,258
24.11.2021, 23:05 9
при чём тут виртуалка ?

сам же и отвечу: она не при чём.

Добавлено через 2 минуты
вызов токо подправить на ./my_filter
0
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 13
24.11.2021, 23:16  [ТС] 10
Очень вам благодарен за вашу консультацию и помощь. Но я хотел бы признаться, что мои познание о системе линукса на уровне дилетанта.
0
3899 / 1538 / 261
Регистрация: 10.12.2013
Сообщений: 5,258
24.11.2021, 23:20 11
ага. а нужен дилетанк
0
26 / 53 / 8
Регистрация: 23.11.2021
Сообщений: 354
25.11.2021, 00:01 12
Лучший ответ Сообщение было отмечено coolhazker как решение

Решение

Вот странно, зачем в оригинале баш с перлом перемешан. Можно же и на чистом баше сделать. Простой однострочник: awk '{ for (i = 1; i <= NF; i+=2){ gsub(/./ , "*", $(i+1)); printf("%s %s ", $i, $(i+1));} printf("\n"); }'
Вот пример:
Код
awk '{ for (i = 1; i <= NF; i+=2){ gsub(/./ , "*", $(i+1)); printf("%s %s ", $i, $(i+1));} printf("\n"); }'
simple words test one two three four
simple ***** test *** two ***** four
0
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 13
25.11.2021, 00:10  [ТС] 13
А можно программу как-то более стандартно структизировать? Ибо боюсь мой препод может ахуеть до беспамятства от такого заебатого скрипта с perl и gex
.
0
26 / 53 / 8
Регистрация: 23.11.2021
Сообщений: 354
25.11.2021, 00:11 14
Задача форума - помочь, а не предоставить готовое решение.
За готовое решение надо платить!

И да, я практически всегда за отчисление ленивых студентов!
0
0 / 0 / 0
Регистрация: 23.11.2021
Сообщений: 13
25.11.2021, 00:36  [ТС] 15
Ну я и просил помощь и благодаря вам понял, что мой скрипт не работает из-за отсутствия установленных директорий. Я преподавателю бросил свой вариант уже давно, просто перед экзаменом хотел разобраться и заодно увидел более элегантные способы реализации этой задачи буквально за одну строчку вместо моего громоздкого кода с кучей рудиментов. А предложение о структуризации несет более альтруистическое желание помочь будущим пользователям форума.
0
Эксперт NIX
1890 / 641 / 228
Регистрация: 28.06.2015
Сообщений: 1,382
Записей в блоге: 16
25.11.2021, 09:21 16
Eddy_Em, Надо убрать все лишнее иначе перлу не конкурент:
Код
awk '{for(i=2; i<=NF; i+=2) gsub(/./, "*", $i)}1'
Добавлено через 10 минут
На сед, посложней, но по крайней мере он работает с кириллицей в отличие от перловского варианта:
Код
sed -r 's/\S+\s+\S+/&\n/g;:1;s/[^* \t](\S*\n)/*\1/;t1;s/\n//g'
0
3899 / 1538 / 261
Регистрация: 10.12.2013
Сообщений: 5,258
25.11.2021, 22:07 17
Цитата Сообщение от nezabudka Посмотреть сообщение
работает с кириллицей в отличие от перловского варианта
шо, в перл не работает ? в 2 раза длиннее ?

( я не проверял )

Добавлено через 4 часа 10 минут
пришлось проверить.
И, действительно, несмотря на то, что в документации к последним версиям указано, что
функция length возвращает по умолчанию длину в символах, а не в байтах ( кириллические юникод-символы занимают два байта ), чтобы length заработала таким образом, надо явно намекнуть, что ждём от неё интерпретацию именно в символах.


Bash
1
2
3
#!/usr/bin/env perl -p
use open ":locale";
s{\S+ \s+ \K \S+} {q[*] x length $&}gex
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2021, 22:07

Посмотрите что не так со скриптом
Задача сделать представление: Врач, количество пациентов за год, лечение которых закончилось...

Подскажите что не так со скриптом
Привет программисты. Имеется такой скрипт: &lt;script type=&quot;text/javascript&quot;&gt;...

Что не так со скриптом? Ресайз картинок
Нашел такой скрипт, вроде бы разобрался, но все равно не выводит изображение.. Подскажите в чем...

что не так с этим циклом
var a = {a:3,b:6,c:9}; var keys = Object.keys(a); var i = 0; while(i&lt;keys.length){ ...

Что не так с этим ЧПУ
подскажите пожалуйста, не могу разобраться. Правильно ли я делаю замену урлов? (У меня стоит...

Что не так с этим кодом?
Что не так с этим кодом? #include &lt;stdio.h&gt; struct Texture { unsigned int tex; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.