removendo o primeiro e o último caractere de cada linha da linha de comando

5

Estou tentando remover o primeiro e o último caractere de cada linha em um arquivo de texto e salvar a versão truncada resultante em um novo arquivo. Alguém tem uma idéia sobre como fazer isso de forma eficiente usando awk ou outros programas / comandos do Linux especificamente para arquivos grandes?

input.txt

(s,2,4,5,6)
"s,1,5,5,2"
{z,0,4,5,3}
[y,2,4,5,5]
(y,4,4,5,7)
(r,20,4,5,7)
(e,9,4,5,2)

Saída esperada.txt

s,2,4,5,6
s,1,5,5,2
z,0,4,5,3
y,2,4,5,5
y,4,4,5,79
r,20,4,5,7
e,9,4,5,2
    
por pacodelumberg 10.01.2013 / 09:34

5 respostas

12

Outra maneira de fazer isso:

rev input | cut -c2- | rev | cut -c2-

(Nota: com o GNU cut , ele só funciona para caracteres feitos de apenas um byte (como no seu exemplo)).

    
por 10.01.2013 / 15:35
6

Conforme a pergunta, exclua a última e a primeira palavra do arquivo de entrada, conforme abaixo:

sed 's/.$//; s/^.//' inputfile
    
por 10.01.2013 / 11:13
4

Existem muitas possibilidades, como sempre

sed 's,.\(.*\).$,,g' your_file

Explicação

  • , - o delimitador sed, pode ser qualquer outro caractere também, dado que é escapado onde for necessário.
  • . Corresponde a um único caractere
  • \(.*\) - Agrupe a parte restante, e esta é armazenada para recuperar ainda mais.
  • . Corresponde a um único caractere novamente
  • $ - fim da linha
  • - imprime o texto correspondido pelo grupo acima
  • g substitui globalmente na linha.
por 10.01.2013 / 09:40
3

Você também pode fazer isso com awk , se preferir

awk '{print substr($0,2,length()-2);}' input.txt > output.txt
    
por 10.01.2013 / 15:19
2
tr -d '()[]{}"' < your_file

Isso também deve funcionar. É bem "traduzir" cada um dos personagens para nada (delete).

A desvantagem é que ele os excluirá se eles não forem o primeiro / último caractere também. Ele também perderá todos os caracteres finais que você não listar no ()[... .

    
por 02.01.2015 / 19:02