Como eu aplico vários processos ao conteúdo de um arquivo de texto usando script, mas salvo o conteúdo modificado em um novo arquivo txt?

2

Eu tenho uma tarefa dizendo "Usando scripts bash e ferramentas de linha de comando, implemente as seguintes funcionalidades: Seu script criado deve ser executado assim: e deve processar arquivos * .txt nesse diretório. Esse processamento inclui as seguintes etapas: 1. tornar todos os alfabetos pequeno caso  2. remover todas as tags xml / html 3. substituir todas as siglas encontradas no arquivo de texto  4. converter todos os números em palavras DICA: -Você pode usar o comando sed. "

Eu escrevi o código como mostrado na imagem. Eu sou realmente novo no Linux, então eu tive que procurar por diferentes comandos para fazer este trabalho. No entanto, conforme a atribuição exigir, a saída deve criar outro arquivo e gravar o conteúdo modificado (após os 4 processos aplicados) nesse novo arquivo, em vez de imprimir cada ação no terminal separadamente.

Código:

#1. Converts all text inside file 1.txt to lowercase
tr '[A-Z]' '[a-z]' < 1.txt
#2. Removes html/xml tags from the text
sed -e 's/<['^]>'*>//g' 1.txt
#3 Replaces all acronyms with full names
sed 's/doc/document/' 1.txt
#4 Converts all numbers to full words
sed 's/2/two/' 1.txt

Texto do arquivo: Este é um documento RANDOM. Existem 2 desses documentos. < b > Eu não me importo < / b >

Saída esperada: Este é um documento aleatório. Existem dois documentos. eu não me importo

Obrigado!

    
por Mishaal 17.10.2017 / 00:38

1 resposta

1

Parece que o seu problema é que nenhum dos seus comandos está modificando o arquivo; todos eles gravam na saída padrão (ou seja, exibem os resultados na janela do terminal). Em geral, duas abordagens vêm à mente:

  1. copie o arquivo e use os sinalizadores de opção que fazem com que seus comandos modifiquem o arquivo copiado no local ou

  2. use canais e redirecionamento de saída para aplicar todas as operações e gravar o resultado em um novo arquivo.

Um problema com a primeira abordagem é que nem todo programa de linha de comando suporta modificação de arquivos no local. Nesse caso, só acontece que sed tem uma opção para editar o arquivo no local; O uso do sinalizador -i option informa sed para editar o arquivo no local. O programa tr não suporta edição no local, no entanto, você pode facilmente substituir o comando tr por um comando sed . Isso pode nos levar a algo como a versão a seguir (levemente modificada) do seu script:

#0. Create a copy of the file
cp -i 1.txt 2.txt

#1. Converts all text inside file 2.txt to lowercase
sed -i -e 's/\(.*\)/\L/' 2.txt

#2. Removes html/xml tags from the text
sed -i -e 's/<['^]>'*>//g' 2.txt

#3 Replaces all acronyms with full names
sed -i -e 's/doc/document/' 2.txt

#4 Converts all numbers to full words
sed -i -e 's/2/two/' 2.txt

Se quiséssemos usar pipes e redirecionamento, poderíamos acabar com algo como a seguinte alternativa:

cat 1.txt \
| sed -e 's/\(.*\)/\L/' \
| sed -e 's/<['^]>'*>//g' \
| sed -e 's/doc/document/' \
sed -e 's/2/two/' \
> 2.txt

Observe que isso não é uma solução para sua tarefa; ele só resolve sua questão sobre como gravar alterações em um arquivo.

    
por 17.10.2017 / 04:21