Eu tive um problema semelhante enquanto estava trabalhando em um script de texto para fala há algum tempo. Meu script tentaria dividir a entrada de texto em partes procurando por novas linhas. Com arquivos PDF, isso resultaria em uma confusão devido à maneira como cada linha termina com uma nova linha.
Então, o que fiz foi compor alguns comandos sed
e tr
para considerar apenas as linhas novas terminando com um ponto final como quebras de linha reais. Não foi muito bonito, mas funcionou.
Usando este trecho eu escrevi um pequeno roteiro para você que espero que ajude:
#!/bin/bash
# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# license: MIT license
# Parses currently selected text and removes
# newlines that aren't preceded by a full stop
SelectedText="$(xsel)"
ModifiedText="$(echo "$SelectedText" | \
sed 's/\.$/.|/g' | sed 's/^\s*$/|/g' | tr '\n' ' ' | tr '|' '\n')"
# - first sed command: replace end-of-line full stops with '|' delimiter and keep original periods.
# - second sed command: replace empty lines with same delimiter (e.g.
# to separate text headings from text)
# - subsequent tr commands: remove existing newlines; replace delimiter with
# newlines
# This is less than elegant but it works.
echo "$ModifiedText" | xsel -bi
O script usa xsel
para analisar o texto destacado no momento e, em seguida, modifica-o com a linha de comando sed
e tr
mencionada acima. O texto processado é então passado de volta para a área de transferência via xsel -bi
.
Veja como você pode usar o script em seu cenário:
- Verifique se você tem
xsel
instalado (sudo apt-get install xsel
on (K) Ubuntu) - salve o script como
copy_without_linebreaks
ou algo semelhante e torne-o executável - atribua o script a uma tecla de atalho de sua preferência em suas preferências do WM
- realce algum texto e pressione a tecla de atalho
- A área de transferência deve ser preenchida automaticamente com o texto modificado