Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.
adaaomad escreveu:
[...]
textmode, pesquisei laço for e comando sed, mas conheço pouco desse ultimo, até agora não tinha usado ele.
o que tenho pronto até agora é:
#!/bin/bash
clear
cd /home
for i in $*; do
done
exit
e o que o msoliver mandou.
é um exercício simples, não funciona porque não sei como percorrer o arquivo e por o x entre as palavras, e tem que ser com o laço for. Estou executando esse script no conectiva10.
obrigado pela força galera, continuo tentando por aqui.
O enunciado do exercício é ambíguo demais para mim. Não define o que é "palavra" nem como o texto deve ser impresso. Vou assumir o que me convir :P.
De cara, eu assumi que o seu exercício queria isto daqui:
for palavra in $(<arquivo.txt); do
echo x${palavra}x
done
A única forma que vi para justificar o uso do laço 'for'. O problema é que isto assume que "palavra" é qualquer combinação de caracteres que não façam parte do 'IFS'.
Não parece que é a solução esperada.
---
O laço do script que você tem está percorrendo os argumentos passados ao script pela linha de comando, parece mais um pedaço de script para trabalhar com nomes de arquivos. Seguindo essa ideia, o seu script poderia ser algo como:
for palavra in $*; do
echo x${palavra}x
done
e para executar:
./script.sh algumas palavras para teste
[code]
Provavelmente, não irá resolver o seu problema porque é obrigatório passar as palavras como argumento.
---
Minha sugestão é usar apenas 'sed'. Irei assumir que "palavra" é qualquer combinação de "não-espaço", "não-pontuação" e "não-número" (dependendo do texto, isto não irá funcionar também):
[code]
sed 's/\([^[:digit:][:blank:][:punct:][:cntrl:]]\+\)/x\1\x/g' arquivo.txt
O que você pesquisou?
O que você tem pronto até agora?
Porque não funciona?
4. Re: Laço for com arquivo de texto
msoliverusa Debian
Post recolhido
Enviado em 28/05/2016 - 22:36h
adaaomad escreveu:
Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.
______________________________________________________________________________
Boa noite adaaomad.
Se é somente uma linha, necessáriamente, não precisa do "LAÇO".
Leia sobre o comando sed (substituição) e REGEX.
Exemplo:
echo "Agradeço desde já quem puder ajudar"|sed -r 's/(\b[A-Za-z]+\b)/#&#/g'
#Agradeço# #desde# #já# #quem# #puder# #ajudar#
Ou
sed -r 's/(\b[A-Za-z]+\b)/x&x/g' Arquivo.txt xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Onde:
cat Arquivo.txt Agradeço desde já quem puder ajudar
Se, por força da necessidade, tiver que usar o LAÇO....
NL=$(wc -l < Arquivo.txt) #"PEGA" A QUANTIDADE DE LINHAS DO Arquivo.txt
for ((i=1;i<=$NL;i++));do
sed -n "$i"p Arquivo.txt|sed -r 's/(\b[A-Za-z]+\b)/x&x/g'
done xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Outra maneira:
while IFS=$'\n' read -r line;do
IFS=" "
read -a WORD <<< "$line"
for ((i=0;i<${#WORD[*]};i++));do
echo -n "x"${WORD[$i]}x" "
done
done<Arquivo.txt xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "A MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver
5. quase
adaaomadusa Fedora
Post recolhido
Enviado em 29/05/2016 - 17:52h
msoliver escreveu:
adaaomad escreveu:
Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.
______________________________________________________________________________
Boa noite adaaomad.
Se é somente uma linha, necessáriamente, não precisa do "LAÇO".
Leia sobre o comando sed (substituição) e REGEX.
Exemplo:
echo "Agradeço desde já quem puder ajudar"|sed -r 's/(\b[A-Za-z]+\b)/#&#/g'
#Agradeço# #desde# #já# #quem# #puder# #ajudar#
Ou
sed -r 's/(\b[A-Za-z]+\b)/x&x/g' Arquivo.txt xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Onde:
cat Arquivo.txt Agradeço desde já quem puder ajudar
Se, por força da necessidade, tiver que usar o LAÇO....
NL=$(wc -l < Arquivo.txt) #"PEGA" A QUANTIDADE DE LINHAS DO Arquivo.txt
for ((i=1;i<=$NL;i++));do
sed -n "$i"p Arquivo.txt|sed -r 's/(\b[A-Za-z]+\b)/x&x/g'
done xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Outra maneira:
while IFS=$'\n' read -r line;do
IFS=" "
read -a WORD <<< "$line"
for ((i=0;i<${#WORD[*]};i++));do
echo -n "x"${WORD[$i]}x" "
done
done<Arquivo.txt xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "A MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver
Olá msoliver, bateu na trave, a última palavra não ficou com x em volta, talvez por ter um ponto final.
textmode escreveu:
O que você pesquisou?
O que você tem pronto até agora?
Porque não funciona?
textmode, pesquisei laço for e comando sed, mas conheço pouco desse ultimo, até agora não tinha usado ele.
o que tenho pronto até agora é:
#!/bin/bash
clear
cd /home
for i in $*; do
done
exit
e o que o msoliver mandou.
é um exercício simples, não funciona porque não sei como percorrer o arquivo e por o x entre as palavras, e tem que ser com o laço for. Estou executando esse script no conectiva10.
obrigado pela força galera, continuo tentando por aqui.
6. Re: Laço for com arquivo de texto [RESOLVIDO]
msoliverusa Debian
Post recolhido
Enviado em 29/05/2016 - 23:46h
adaaomad escreveu:
msoliver escreveu:
[quote]adaaomad escreveu:
Salve galera, em um trabalho da facul preciso criar um script que use o laço for para inserir um x no começo e no final de cada palavra em um arquivo de texto. Já procurei em vários lugares e não achei. O arquivo de texto contém apenas uma linha. Agradeço desde já quem puder ajudar.
______________________________________________________________________________
Boa noite adaaomad.
Se é somente uma linha, necessáriamente, não precisa do "LAÇO".
Leia sobre o comando sed (substituição) e REGEX.
Exemplo:
echo "Agradeço desde já quem puder ajudar"|sed -r 's/(\b[A-Za-z]+\b)/#&#/g'
#Agradeço# #desde# #já# #quem# #puder# #ajudar#
Ou
sed -r 's/(\b[A-Za-z]+\b)/x&x/g' Arquivo.txt xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Onde:
cat Arquivo.txt Agradeço desde já quem puder ajudar
Se, por força da necessidade, tiver que usar o LAÇO....
NL=$(wc -l < Arquivo.txt) #"PEGA" A QUANTIDADE DE LINHAS DO Arquivo.txt
for ((i=1;i<=$NL;i++));do
sed -n "$i"p Arquivo.txt|sed -r 's/(\b[A-Za-z]+\b)/x&x/g'
done xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Outra maneira:
while IFS=$'\n' read -r line;do
IFS=" "
read -a WORD <<< "$line"
for ((i=0;i<${#WORD[*]};i++));do
echo -n "x"${WORD[$i]}x" "
done
done<Arquivo.txt xAgradeçox xdesdex xjáx xquemx xpuderx xajudarx
Se, a resposta foi satisfatória, resolveu seu problema e te ajudou. . .
Marque-a como "A MELHOR", assim ganho uns pontos, o que incentiva a continuar colaborando . . . Rsrsrsr
Abç.:
Marcelo Oliver
Olá msoliver, bateu na trave, a última palavra não ficou com x em volta, talvez por ter um ponto final.
Boa noite adaaomad.
Testei com o "." no final, e todas as opções funcionam....
Qual delas vc testou?
7. Re: Laço for com arquivo de texto [RESOLVIDO]
adaaomadusa Fedora
Post recolhido
Enviado em 31/05/2016 - 00:06h
Boa noite adaaomad.
Testei com o "." no final, e todas as opções funcionam....
Qual delas vc testou?
Boa noite, testei com o for, mas a última palavra não ficava como deveria, não sei o porquê.
Obrigado msoliver e textmode pela ajuda, esse post me ajudou a compreender melhor o comando sed. no final ficou assim:
#!/bin/bash
clear
cd /home
cd texto/
for i in $(<a.txt); do
echo -n "x${i}x "
done
echo
exit
Usamos cookies essenciais para manter o site funcionando e Google Analytics para métricas de audiência. Cookies de anúncios só serão carregados se você permitir.