Remover espaços entre duas palavras APENAS

0

Eu tenho o seguinte

"/x/x y/asfas/g.pdf          " "fdfdf
"/x/y/yy    y/d.doc    " "fdfdf
etc..

Eu quero remover os espaços entre a extensão e o "APENAS

quando usei tr para remover o espaço à direita, ele remove os espaços intermediários que têm mais de um espaço (ex: yy y se torna yy y )

    
por Seif 20.06.2017 / 12:05

3 respostas

1

abordagem sed :

sed 's/\([^.]*\.[^."[:space:]]*\)[[:space:]]\+"/"/' file
  • \([^.]*\.[^."[:space:]]*\) - o primeiro grupo capturado contendo nome de arquivo hipotético com extensão

  • [[:space:]]\+" - garante pelo menos um espaço entre extensão e "

por 20.06.2017 / 12:11
1

Você poderia fazer:

sed 's/\(\.[^"[:blank:]]*\)[[:blank:]]*"/"/g'

Isso é remover as seqüências de espaços em branco que seguem . seguido por uma seqüência de caracteres não em branco-nem- " e são seguidos por um "

Para remover os espaços em branco antes de cada outro caractere de aspas duplas em cada linha, você poderia fazer algo como:

sed 's/[[:blank:]]*"/"&/g
     s/\(\([^"]*"\)\{3\}\)[[:blank:]]*"/"/g
     s/"\([^"]*"\)//g'

Isto é:

  1. Insira um " extra antes de cada <blanks>"
  2. Alterar todo o <X>"<blanks>"<Y>"<blanks>" para <X>"<blanks>"<Y>""
  3. Remova todos os outros " para desfazer as inserções em 1

Ou de maneira mais direta com awk :

awk -F \" -v OFS=\" '
  {
    for (i = 2; i <= NF; i += 2 )
      sub(/[[:blank:]]*$/, "", $i)
    print
  }'

Observe que tr não apertaria os caracteres, a menos que você use a opção -s . É mais provável que você tenha esquecido de citar uma expansão de parâmetro ou substituição de comando que continha a saída de tr .

Em qualquer caso, tr não pode ser usado para essa tarefa. É apenas uma ferramenta de transliteração. Tudo o que ele pode fazer é traduzir / excluir / espremer todos os caracteres de espaço. Não é possível converter / excluir / espremer apenas alguns alguns caracteres de espaço.

    
por 20.06.2017 / 12:10
1

Use o GNU sed. Procure por um ou mais espaços, seguidos de uma aspa dupla. Substitua isso por aspas duplas:

sed -i -e 's/ \+"/"/' file

ou assim, a seu critério:

sed -i -e 's/[[:space:]]\+"/"/' file
    
por 20.06.2017 / 13:02