Copie a linha no arquivo de texto e adicione a linha modificada ao final da linha no mesmo arquivo

0

Eu gostaria de copiar a linha no arquivo de texto editá-lo na mosca para substituir all / to | e cole na mesma linha na mesma linha.

Eu tenho a primeira linha no arquivo de texto:

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg

Copiar texto entre (nome-nunca-muda) e .jpg

/aCcboeasdfdRD/asdfasdft21

Alterar para / para |

|aCcboeasdfdRD|asdfasdft21

E adicione ao final da mesma linha onde URL é, com um separador o separador pode ser texto ou número ou caractere especial

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg  (separator)  |aCcboeasdfdRD|asdfasdft21

E isso deve funcionar com vários arquivos de texto com URLs diferentes

Eu não posso criar novos arquivos e mesclá-los, isso deve ser rápido porque o nome dos arquivos de texto é diferente e eu não sei nomes de arquivos

    
por unknown 02.09.2018 / 21:54

2 respostas

1

Tente isso,

awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file

http://webpage.com/(name-never-changes)/aCcboeasdfdRD/asdfasdft21.jpg (saperatot) |aCcboeasdfdRD|asdfasdft21
  • /. dois separadores de campo
  • $0 para imprimir a linha completa
  • $(NF-2) $(NF-1) o terceiro e segundo campos do final

se você quiser salvar no arquivo

Opção 1 : (se houver poucas linhas)

echo "'awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file'" > file

Opção 2 : (se for um arquivo grande)

 awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' file > tempFile ; mv tempFile file

Para vários arquivos em uma pasta:

cd /path/to/dir
for file in 'ls'
do
    echo "'awk -F '[/.]' '{print $0" (separator) |"$(NF-2)"|"$(NF-1)}' $file'" > $file
done
    
por 02.09.2018 / 22:11
0

Esta é uma solução sed :

sed 'h; s@^[^/]*//[^/]*/[^/]*/@  (separator)  |@; s@/@|@g; s/\.jpg$//; x; G; s/\n//'

Passo a passo:

  • h copia a linha atual do “espaço de padrão” para o “espaço de espera”.
  • s@^[^/]*//[^/]*/[^/]*/@  (separator)  |@ é um comando s ubstitute usando @ como o delimitador. Ele substitui
    stuff//stuff/stuff/
    (por exemplo, http://example.com/(top-level-directory)/ ) com   (separator)  | .
    Você poderia fazer %código% se você quisesse.
  • s@^http//example.com/(top-level-directory)/@ (separator) |@ é também um comando s ubstitute usando s@/@|@g como delimitador. Ele substitui todos os caracteres restantes @ na linha por / caracteres. Se você tem certeza de que haverá apenas um (entre | e (second-level-directory) ), você pode deixar o (filename) .
  • g obviamente remove a extensão s/\.jpg$// do final da linha. (Se você não sabe qual é a extensão, você poderia fazer algo como .jpg .)
  • s/\.[^.]*$// troca o espaço padrão e o espaço de espera, então a linha original agora está de volta no espaço padrão, e a
      (separator)  |(second-level-directory)|(filename)
    que acabamos de construir está no espaço de espera.
  • x g ets o conteúdo do espaço de espera e anexa-o ao espaço do padrão (injetando uma nova linha entre eles).
  • G remove essa nova linha.

Isso passará linhas em branco através de linhas em branco. Outras linhas serão mutiladas.

Se você quiser editar o (s) arquivo (s), passe a opção s/\n// the sed (ou -i , se desejado ou requerido em seu sistema).

    
por 08.09.2018 / 02:40