Bir metin dosyasının her satırının başına satır numarası ve sekme ekleyebilir miyim?
Bir metin dosyasının her satırının başına satır numarası ve sekme ekleyebilir miyim?
Yanıtlar:
awk '{printf "%d\t%s\n", NR, $0}' < filename
awk '{print NR, "\t", $0}'
.
nl
da yanlıştır. Kaynak kodda, yalnızca boşluk içeren satırları saymadığından size asla doğru satır numaralarını vermez.
Nl komutu bunu yapmalıdır, ancak satır numarasından önce de boşluk ekler. Linux coreutils'in bir parçası.
nl lines.txt
1 $bkWTN
2 $cV8$.
nl
sayıdan önce boş bırakmamızı söyleyebilirsiniz . Sadece -w1
bir sayı için minimum genişlik 1 olduğunu söylemek seçeneğini kullanın.
-nln
şunları yapabilirsiniz satır numaraları önce boşluk (lar) istemiyorsanız sol haklı. Ayrıca, kullanabileceğiniz bir sekme ayırıcı belirtmek için -s$'\t'
veya -s' '
( ctrl+v
ardından tek tırnak işaretleri arasına bir sekme ekleyin tab
).
nl -w1
(GNU 8.24 coreutils itibaren) yok değil satır numaralarını kesecek.
sed = test.txt | sed 'N;s/\n/\t/'
"Sed =" komutu satır numarasını ve ardından satırbaşını yazdıktan sonra bir sonraki satırı yazacaktır.
"N; s / \ n / \ t /" ifadesi her satırı alır, bir sonraki satırı alır (yani, satır numarası ve satır) ve satırbaşını bir sekmeyle değiştirir.
\n
(ilk yaygın kullanımı Unix içinde olduğu için, yaygın olarak sadece "satır" olarak adlandırılır) satır besleme ve \r
satır başı olduğunu. Windows kullanır \r\n
(ayrıca denir CRLF
).
Peki ya
cat -n somefile.txt
?
Tamam, İşte tek satırlık bir bash çözümü:
$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=
İlk IFS ayarı bash'e aynı anda tam bir satır okumasını söyler. İkinci satır, IFS'yi varsayılana sıfırlar.
Ek bir avantaj olarak, tamamen kabuğunuzda çalışır ve bir program yürütmez!
Tamam, bunu yapmanın yollarını topladığımızdan,
grep -n . file.txt | sed 's/\(^[0-9]*\):/\1 /g'
# this is a tab with Ctrl-V + Tab =====> ----
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//'
veya bazı GNU olmayanlar için sed
:
cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'