A resposta abaixo, com a linha de comando nl, é uma solução muito mais simples.
Daniel Ribeiro
2
@DanielRibeiro mais simples, mas menos confiável e menos flexível.
Jonathan Hartley
@DanielRibeiro A resposta usando nltambém é ERRADA. No código fonte, ele nunca fornecerá os números de linha corretos, pois não conta linhas apenas com espaço em branco.
Oligofren
@jtbandes Sua solução adiciona espaços entre o número da linha e a guia (pelo menos no meu mac)
Yossi Vainshtein 18/06/06
55
O comando nl deve fazer isso, mas também adiciona espaço antes do número da linha. Faz parte dos coreutils do Linux.
Na verdade, você pode dizer nlpara omitir o espaço antes do número. Basta usar a -w1opção de indicar a largura mínima para um número é 1.
CJM
2
Observe que 'nl' assume por padrão que seu texto é dividido em 'páginas' com cabeçalhos e rodapés, todos delimitados por linhas como '\:' ou '\: \:' ou '\: \: \:'. Se o seu texto tiver linhas como essa, 'nl' produzirá resultados inesperados, como engolir essas linhas, seções sem numeração ou reiniciar a numeração de 1 em uma seção. Use -dXY (onde XY é um par de caracteres que não ocorrem em uma linha por si mesmos no seu texto) para evitar esse comportamento. No caso geral, isso pode ser difícil de prever, portanto, recomendo usar uma das outras soluções nesta página.
Jonathan Hartley
Usar '-w1' não apenas removerá o espaço após os números, mas também truncará os números das linhas para que tenham apenas um caractere de largura, o que significa que os números das linhas exibem apenas o dígito menos significativo. Isso quase certamente não é o que você deseja.
Jonathan Hartley
4
Com -nlnvocê, você pode justificar à esquerda se não quiser o espaço (s) antes dos números das linhas. Além disso, para especificar um separador separador de você poderia usar -s$'\t'ou -s' '(inserir uma tabulação entre aspas simples com ctrl+ventão tab).
181114 Don
2
@JonathanHartley nl -w1(do GNU coreutils 8.24) não trunca os números de linha.
Skippy le Grand Gourou
10
sed = test.txt | sed 'N;s/\n/\t/'
O comando "sed =" imprimirá o número da linha seguido por um retorno de carro e depois a próxima linha.
A expressão "N; s / \ n / \ t /" pega cada linha, obtém a próxima linha (ou seja, número da linha e a linha) e substitui o retorno de carro por uma tabulação.
Imprime um "t" sem guia com a minha versão do sed: 8t Eu vi os expoentes da minha geração destruídos pela loucura T9, morrendo de fome, histéricos, nus,
Richard Hoskins
1
Observe que \né um feed de linha (normalmente chamado de "nova linha", desde que seu primeiro uso generalizado foi no Unix) e \ré um retorno de carro. Usos do Windows \r\n(também conhecido como CRLF).
Camilo Martin
(Yay nitpicking!)
Camilo Martin
Se entrarmos em detalhes sobre como as janelas podem ser diferentes, talvez seja necessário considerar o UTF16.
Respostas:
fonte
awk '{print NR, "\t", $0}'
.nl
também é ERRADA. No código fonte, ele nunca fornecerá os números de linha corretos, pois não conta linhas apenas com espaço em branco.O comando nl deve fazer isso, mas também adiciona espaço antes do número da linha. Faz parte dos coreutils do Linux.
fonte
nl
para omitir o espaço antes do número. Basta usar a-w1
opção de indicar a largura mínima para um número é 1.-nln
você, você pode justificar à esquerda se não quiser o espaço (s) antes dos números das linhas. Além disso, para especificar um separador separador de você poderia usar-s$'\t'
ou-s' '
(inserir uma tabulação entre aspas simples comctrl+v
entãotab
).nl -w1
(do GNU coreutils 8.24) não trunca os números de linha.O comando "sed =" imprimirá o número da linha seguido por um retorno de carro e depois a próxima linha.
A expressão "N; s / \ n / \ t /" pega cada linha, obtém a próxima linha (ou seja, número da linha e a linha) e substitui o retorno de carro por uma tabulação.
fonte
\n
é um feed de linha (normalmente chamado de "nova linha", desde que seu primeiro uso generalizado foi no Unix) e\r
é um retorno de carro. Usos do Windows\r\n
(também conhecido comoCRLF
).cat -n adiciona roupa de banho como "123 itens de linha" e que o regexp o modifica para "roupa de númeroTABlinés"
fonte
ou
fonte
E se
?
fonte
OK, aqui está uma solução de bash de uma linha:
A primeira configuração do IFS informa ao bash para ler uma linha completa de cada vez. A segunda linha redefine o IFS para o padrão.
Como um bônus adicional, ele roda completamente no seu shell e não executa um programa!
fonte
Ok, já que estamos coletando maneiras de fazer isso,
fonte
ou para alguns não-GNU
sed
s:fonte