É possível usar comando read sem gravar pontução? [RESOLVIDO]

1. possvel usar comando read sem gravar pontuo? [RESOLVIDO]

Quintino Lopes Castro Tavares
qcastro

(usa Debian)

Enviado em 30/04/2020 - 11:42h

Olá, tudo bem com vocês? Lembrem de lavar as mãos e cuidem-se!
Fiz um script que lê os parágrafo (lines) e transforma-os em array, depois capta o que o usuário escreveu e compara. Meu problema é que eu queria que fizesse isso sem a pontuação, quer seja quando lê o arquivo, quer seja quando o usuário escreve. Mas infelizmente meu conhecimento bash é pouco e não tenho conseguido decifrar.
Para pegar as linhas do texto, o meu código é o seguinte:
declare -a  linhas=()
while IFS= read -r line; do
linhas+=("$line")
done <texto-copiado.txt

Para a comparação, com o input, meu código é:
FSI= read -r resposta
x=$[ $x + 1 ]
if [ "$resposta" = "${linhas[x]}" ]
then
[etc.]

Alguém pode me auxiliar a criar algo parecido que:
1) copia as linhas do file arquivo-copiado.txt sem a pontuação;
2) lê o que o usuário escreve também sem a pontuação (para depois comparar os dois: 1 e 2)

Desde já agradeço muito!


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/04/2020 - 23:08h

qcastro escreveu:

Olá, tudo bem com vocês? Lembrem de lavar as mãos e cuidem-se!
Fiz um script que lê os parágrafo (lines) e transforma-os em array, depois capta o que o usuário escreveu e compara. Meu problema é que eu queria que fizesse isso sem a pontuação, quer seja quando lê o arquivo, quer seja quando o usuário escreve. Mas infelizmente meu conhecimento bash é pouco e não tenho conseguido decifrar.
Para pegar as linhas do texto, o meu código é o seguinte:
declare -a  linhas=()
while IFS= read -r line; do
linhas+=("$line")
done <texto-copiado.txt

Para a comparação, com o input, meu código é:
FSI= read -r resposta
x=$[ $x + 1 ]
if [ "$resposta" = "${linhas[x]}" ]
then
[etc.]

Alguém pode me auxiliar a criar algo parecido que:
1) copia as linhas do file arquivo-copiado.txt sem a pontuação;
2) lê o que o usuário escreve também sem a pontuação (para depois comparar os dois: 1 e 2)

Desde já agradeço muito!

Boa noite QCastro.
Segue sugestão para "eliminar a acentuação".

declare -a  linhas=()
while IFS= read -r line; do
linhas+=($(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${line}"))
done <texto-copiado.txt


Para a comparação, com o input, meu código é:
FSI= read -r resposta
resposta=$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${resposta}")
x=$[ $x + 1 ]
if [ "$resposta" = "${linhas[x]}" ];then
[etc.]

Sugestão para tirar os caracteres especiais do arquivo.

while read line;do
echo $line;
done<<<$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' texto.txt)

Para deixar o comando "mais elegante".
Cace='áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ'
Sace='aAaAaAaAeEeEiIoOoOoOuUcC'
Sed elegante:
sed "y/${Cace}/${Sace}/" texto.txt
_____________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

3. Re: possvel usar comando read sem gravar pontuo? [RESOLVIDO]

4. Re: possvel usar comando read sem gravar pontuo? [RESOLVIDO]

Quintino Lopes Castro Tavares
qcastro

(usa Debian)

Enviado em 03/05/2020 - 09:47h

msoliver escreveu:

Segue sugestão para "eliminar a acentuação".

declare -a  linhas=()
while IFS= read -r line; do
linhas+=($(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${line}"))
done <texto-copiado.txt


Para a comparação, com o input, meu código é:
FSI= read -r resposta
resposta=$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${resposta}")
x=$[ $x + 1 ]
if [ "$resposta" = "${linhas[x]}" ];then
[etc.]

Sugestão para tirar os caracteres especiais do arquivo.

while read line;do
echo $line;
done<<<$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' texto.txt)

Para deixar o comando "mais elegante".
Cace='áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ'
Sace='aAaAaAaAeEeEiIoOoOoOuUcC'
Sed elegante:
sed "y/${Cace}/${Sace}/" texto.txt
_____________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


Muito obrigado Marcelo Oliver (msoliver), era mesmo algo assim que queria fazer. Valeu!!

Para tirar acentuação de cada parágrafo, conforme seu exemplo;
while IFS= read -r line; do
line=$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${line}")
linhas+=("$line")
[etc]


Para tirar só a pontuação, mudei o sed para;
while IFS= read -r line; do
line=$(sed -e "s/[[:punct:]]\+//g" <<< "${line}")
linhas+=("$line")
[etc]



5. Re: possvel usar comando read sem gravar pontuo? [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/05/2020 - 17:59h


qcastro escreveu:

msoliver escreveu:

Segue sugestão para "eliminar a acentuação".

declare -a  linhas=()
while IFS= read -r line; do
linhas+=($(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${line}"))
done <texto-copiado.txt


Para a comparação, com o input, meu código é:
FSI= read -r resposta
resposta=$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${resposta}")
x=$[ $x + 1 ]
if [ "$resposta" = "${linhas[x]}" ];then
[etc.]

Sugestão para tirar os caracteres especiais do arquivo.

while read line;do
echo $line;
done<<<$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' texto.txt)

Para deixar o comando "mais elegante".
Cace='áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ'
Sace='aAaAaAaAeEeEiIoOoOoOuUcC'
Sed elegante:
sed "y/${Cace}/${Sace}/" texto.txt
_____________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


Muito obrigado Marcelo Oliver (msoliver), era mesmo algo assim que queria fazer. Valeu!!

Para tirar acentuação de cada parágrafo, conforme seu exemplo;
while IFS= read -r line; do
line=$(sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/' <<< "${line}")
linhas+=("$line")
[etc]


Para tirar só a pontuação, mudei o sed para;
while IFS= read -r line; do
line=$(sed -e "s/[[:punct:]]\+//g" <<< "${line}")
linhas+=("$line")
[etc]

Qcastro, obrigado pela escolha da melhor resposta.

Quanto ao seu script,
a variável "resposta", tem somente uma palavra?

A intenção é checar se "$resposta" esta na linha, no caso, array linhas?

Notei tbém, que o array com índice "0", não é checada, é isso mesmo?
No condicional:
if [ "$resposta" = "${linhas[x]}" ]
a saída será sempre "false"
Dependendo da finalidade do script, é possível simplificar....
Não sendo necessário a criação de um array para cada linha...


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________