Zastanawiam się, jak zrobiłbyś to w systemie Windows ...
itsadok
4
Czy powinno to dotyczyć przepływu stosu? Dla superużytkownika odpowiedzią jest Notatnik i dużo cierpliwości.
kokos
2
Więc chcesz dodać lub dołączyć. Twój tytuł i
treść
Chyba chcę dopisać na początku , „prepend” to tylko słowo dla hakerów.
Richard Hoskins,
W systemie Windows, podobnie jak w przypadku innych pytań programistycznych, możesz zainstalować Cygwin, a następnie skorzystać z poniższych odpowiedzi.
odpowiedź poniżej z wierszem poleceń nl jest znacznie prostszym rozwiązaniem.
Daniel Ribeiro,
2
@DanielRibeiro prostsze, ale mniej niezawodne i mniej elastyczne.
Jonathan Hartley,
@DanielRibeiro Użycie odpowiedzi nljest również NIEPRAWIDŁOWE. W kodzie źródłowym nigdy nie da ci prawidłowych numerów linii, ponieważ nie liczy linii z białymi spacjami.
oligofren,
@jtbandes Twoje rozwiązanie dodaje spacje między numerem wiersza a tabulatorem (przynajmniej na moim komputerze Mac)
Yossi Vainshtein
55
Polecenie nl powinno to zrobić, ale dodaje również spację przed numerem wiersza. Jest to część jądra systemu Linux.
W rzeczywistości możesz powiedzieć, nlaby pominąć spację przed liczbą. Wystarczy użyć -w1opcji, aby powiedzieć, że minimalna szerokość dla liczby wynosi 1.
cjm
2
Uważaj, że „nl” domyślnie zakłada, że twój tekst jest podzielony na „strony” z nagłówkami i stopkami, wszystkie ograniczone liniami takimi jak „\:” lub „\: \:” lub „\: \: \:”. Jeśli w tekście są takie linie, to „nl” da nieoczekiwane rezultaty, takie jak połknięcie tych linii, sekcji bez numeracji lub ponowne uruchomienie numeracji od 1 w sekcji. Użyj -dXY (gdzie XY to para znaków, które same nie występują w linii w tekście), aby zapobiec takiemu zachowaniu. W ogólnym przypadku może to być trudne do przewidzenia, dlatego polecam użycie jednego z innych rozwiązań na tej stronie.
Jonathan Hartley,
Korzystanie „-W1” nie będzie po prostu usunąć spację po numerach, ale będzie również obciąć numery linii być tylko jedna postać szeroko, czyli numery linii wyświetlać tylko ich najmniej znaczącej cyfry. To prawie na pewno nie to, czego chcesz.
Jonathan Hartley,
4
Dzięki -nlnmożesz uzasadnić w lewo, jeśli nie chcesz spacji przed numerami wierszy. Ponadto, aby określić kartę separatora można użyć -s$'\t'lub -s' '(Włóż kartę między apostrofami z ctrl+vpotem tab).
don_crissti
2
@JathanathanHartley nl -w1(z GNU coreutils 8.24) nie obcina numerów linii.
Skippy le Grand Gourou
10
sed = test.txt | sed 'N;s/\n/\t/'
Polecenie „sed =” wypisze numer wiersza, a następnie znak powrotu karetki, a następnie następny wiersz.
Wyrażenie „N; s / \ n / \ t /” zajmie każdą linię, pobierze następną linię (tj. Numer linii i linię) i zastąpi znak powrotu karetki znakiem tabulacji.
Drukuje „t” bez zakładki w mojej wersji sed: 8t Widziałem, jak najlepsze umysły mojego pokolenia zostały zniszczone przez szaleństwo 9t, głodując histerycznie nago,
Richard Hoskins
1
Zauważ, że \njest to wysuw wiersza (zwykle nazywany po prostu „nowym wierszem”, ponieważ jego pierwsze powszechne użycie miało miejsce w Uniksie) i \rjest znakiem powrotu karetki. Używa systemu Windows \r\n(zwanego także CRLF).
Camilo Martin,
(Yay nitpicking!)
Camilo Martin
Jeśli mamy zamiar zacząć zastanawiać się nad tym, jak okna mogą się różnić, może być konieczne rozważenie UTF16.
Odpowiedzi:
źródło
awk '{print NR, "\t", $0}'
.nl
jest również NIEPRAWIDŁOWE. W kodzie źródłowym nigdy nie da ci prawidłowych numerów linii, ponieważ nie liczy linii z białymi spacjami.Polecenie nl powinno to zrobić, ale dodaje również spację przed numerem wiersza. Jest to część jądra systemu Linux.
źródło
nl
aby pominąć spację przed liczbą. Wystarczy użyć-w1
opcji, aby powiedzieć, że minimalna szerokość dla liczby wynosi 1.-nln
możesz uzasadnić w lewo, jeśli nie chcesz spacji przed numerami wierszy. Ponadto, aby określić kartę separatora można użyć-s$'\t'
lub-s' '
(Włóż kartę między apostrofami zctrl+v
potemtab
).nl -w1
(z GNU coreutils 8.24) nie obcina numerów linii.Polecenie „sed =” wypisze numer wiersza, a następnie znak powrotu karetki, a następnie następny wiersz.
Wyrażenie „N; s / \ n / \ t /” zajmie każdą linię, pobierze następną linię (tj. Numer linii i linię) i zastąpi znak powrotu karetki znakiem tabulacji.
źródło
\n
jest to wysuw wiersza (zwykle nazywany po prostu „nowym wierszem”, ponieważ jego pierwsze powszechne użycie miało miejsce w Uniksie) i\r
jest znakiem powrotu karetki. Używa systemu Windows\r\n
(zwanego takżeCRLF
).cat -n dodaje numery pościeli jako „123 elementy linii”, a wyrażenie regularne modyfikuje je do „pościeliTablinecontents”
źródło
lub
źródło
Co powiesz na
?
źródło
OK, oto jedno-liniowe rozwiązanie bash:
Pierwsze ustawienie IFS każe bashowi czytać jednocześnie pełną linię. Druga linia resetuje IFS do wartości domyślnych.
Jako dodatkowy bonus, działa całkowicie w twojej powłoce i nie wykonuje programu!
źródło
Ok, ponieważ zbieramy sposoby, aby to zrobić,
źródło
lub dla niektórych nie-GNU
sed
:źródło