LINUX.ORG.RU
ФорумJob

Нужна помощь по написанию скрипта

 , ,


1

1

Нужно написать bash-скрипт

Имя, Фамилия, Телефон, электронная почта — телефонная книжка в формате csv. Преобразовать в валидный html, который можно просматривать в браузере. Пользоваться можно только sed.

Пример входного файла: Имя,Фамилия,Телефон,Почта’/n’ Петр,Иванов,1234567,petya@mail.ru ‘/n’ Иван,Петров,7654321,ivan@gmail.com ‘/n’

(Через ‘/n’ обозначаю перенос строки)

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

Чё почём? 🤣

aol ★★★★★
()

Пример входного файла

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

eve
()

Пользоваться можно только sed.

Это типа, как головоломка из журнала? :)

Oleg_Iu
()

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

Сделаю эту лабораторку за 2000 р.

anonymous_sapiens ★★★★★
()

Пользоваться можно только sed.

Почему? Или ты очередной нерадивый студент, что сваливает на форум свои упражнения?

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

Или ты очередной нерадивый студент, что сваливает на форум свои упражнения?

Это же очевидно.

Meyer ★★★★★
()

Это очень сложная задача, потому что валидный e-mail может выглядеть очень, очень странно.

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

Это очень сложная задача, потому что валидный e-mail может выглядеть очень, очень странно.

В общем случае валидный email-адрес действительно может выглядеть очень странно, однако в данном случае есть дополнительное предусловие: файл является валидным csv. То есть запятые и переносы строк являются частью csv-разметки, и по этой причине входить в состав email-адреса они не могут.

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

файл является валидным csv. То есть запятые и переносы строк являются частью csv-разметки, и по этой причине входить в состав email-адреса они не могут.

id,email
0,"qwe,rt@domain"
1,"asd
123@domain"

Это валидный csv с двумя записями.

cloun1902
()

Пользоваться можно только sed.

А echo и cat можно?

ya-betmen ★★★★★
()
Ответ на: комментарий от cloun1902

Ты выбрал более сложный вариант синтаксиса csv (в котором кавычки также являются частью csv-разметки), но в любом случае благодаря cvs заниматься разбором синтаксиса email-адресов (что является сложной задачей) - не требуется.

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

благодаря cvs заниматься разбором синтаксиса email-адресов (что является сложной задачей) - не требуется

В такой формулировке да, всё верно.

cloun1902
()

Держи, лодырь

#!/bin/bash

sed 's|^|a.push("|' "$1" | sed 's|$|");|' | sed '1i<script>' | sed '2ivar a=[];' | sed '' | sed '$a</script>' | sed "1i<html>\n<body>" | sed 's|<script>|<script type= text/javascript>|' | sed 's|<body>|<head>|' | sed 's|var a|window.a|' | sed 's|</script>|function init(){window.s="<table>";for(i in a) {if(a[i].trim()==""){continue}s+="<tr>";var c=a[i].split(",");for(j in c){s+=(i<1?"<th>":"<td>")+c[j]}};document.getElementsByTagName("body")[0].innerHTML=s;}|' | sed '$a</script>\n</head>' | sed '$a<body onload="init()">\n</body>\n</html>' > "$2"

Кладешь в файлик script.sh, запускаешь script.sh input.csv output.html

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от Manhunt
#!/bin/bash

sed 's|^|a.push("|' "$1" | sed 's|$|");|' | sed '1i<script>' | sed '2ivar a=[];' | sed '' | sed '$a</script>' | sed "1i<html>\n<body>" | sed 's|<script>|<script type= text/javascript>|' | sed 's|<body>|<head>|' | sed 's|var a|window.a|' | sed 's|</script>|function init(){window.s="<table>";for(i in a) {if(a[i].trim()==""){continue}s+="<tr>";var c=a[i].split(",");for(j in c){s+=(i<1?"<th>":"<td>")+c[j]}};document.getElementsByTagName("body")[0].innerHTML=s;}|' | sed '$a</script>\n</head>' | sed '$a<body onload="init()">\n</body>\n</html>' | sed 's|innerHTML=s;}|innerHTML=s;var l=document.getElementsByTagName("td");for(var k=0;k<l.length;k++){l.item(k).addEventListener("click",function(){if(this.innerText.indexOf("@")>0){alert("You want to send message to " + this.innerText)}})}};|' > "$2"

Пофиксил, cast anton_kuznetsov

ya-betmen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.