ฉันจะเติมหมายเลขบรรทัดและแท็บลงในแต่ละบรรทัดของไฟล์ข้อความได้อย่างไร


45

ฉันจะผนวกหมายเลขบรรทัดและแท็บต่อท้ายแต่ละบรรทัดของไฟล์ข้อความได้อย่างไร


สิ่งที่ฉันสงสัยคือวิธีที่คุณควรจะทำมันบน Windows ...
itsadok

4
ควรอยู่ใน stackoverflow หรือไม่ สำหรับ superuser คำตอบคือ Notepad และความอดทน
kokos

2
ดังนั้นคุณต้องการที่จะเพิ่มหรือผนวก ชื่อและร่างกายของคุณจะแตกต่างกันตำรา;)
matpie

ฉันเดาว่าฉันต้องการที่จะผนวกเข้ากับจุดเริ่มต้น "เสริม" เป็นเพียงคำที่แฮ็กเกอร์
ริชาร์ดฮอสกิ้นส์

บน Windows เช่นเดียวกับคำถามการเขียนโปรแกรมอื่น ๆ คุณสามารถติดตั้ง Cygwin แล้วใช้คำตอบด้านล่าง
Jonathan Hartley

คำตอบ:


49
awk '{printf "%d\t%s\n", NR, $0}' < filename

10
awk '{print NR, "\t", $0}'หรือ
jtbandes

1
คำตอบด้านล่างด้วยบรรทัดคำสั่ง nl เป็นวิธีที่ง่ายกว่ามาก
Daniel Ribeiro

2
@DanielRibeiro เรียบง่าย แต่น่าเชื่อถือน้อยกว่าและยืดหยุ่นน้อยกว่า
Jonathan Hartley

@DanielRibeiro คำตอบที่ใช้nlคือผิดเช่นกัน ในซอร์สโค้ดมันจะไม่ให้หมายเลขบรรทัดที่ถูกต้องแก่คุณเนื่องจากจะไม่นับบรรทัดที่มีช่องว่างเท่านั้น
oligofren

@jtbandes โซลูชันของคุณเพิ่มช่องว่างระหว่างหมายเลขบรรทัดและแท็บ (อย่างน้อยใน mac ของฉัน)
Yossi Vainshtein

55

คำสั่ง nl ควรทำเช่นนี้ แต่จะเพิ่มช่องว่างหน้าหมายเลขบรรทัดด้วย มันเป็นส่วนหนึ่งของ coreutils Linux

nl lines.txt
 1  $bkWTN
 2  $cV8$.

4
ที่จริงแล้วคุณสามารถบอกnlให้เว้นช่องว่างข้างหน้าหมายเลขนั้นได้ เพียงใช้-w1ตัวเลือกเพื่อบอกความกว้างขั้นต่ำของตัวเลขคือ 1
cjm

2
ระวังว่า 'nl' ถือว่าโดยค่าเริ่มต้นว่าข้อความของคุณแบ่งออกเป็น 'หน้า' ที่มีหัวกระดาษและท้ายกระดาษทั้งหมดคั่นด้วยบรรทัดเช่น '\:' หรือ '\: \:' หรือ '\: \: \:' หากข้อความของคุณมีบรรทัดใด ๆ เช่นนี้ข้อความ 'nl' จะให้ผลลัพธ์ที่ไม่คาดคิดเช่นการกลืนบรรทัดเหล่านั้นส่วนที่ไม่มีหมายเลขหรือเริ่มหมายเลขใหม่จาก 1 ในส่วน ใช้ -dXY (โดยที่ XY เป็นตัวอักษรคู่หนึ่งที่ไม่ปรากฏในบรรทัดด้วยตนเองในข้อความของคุณ) เพื่อป้องกันพฤติกรรมนี้ โดยทั่วไปอาจเป็นการยากที่จะคาดการณ์ดังนั้นฉันขอแนะนำให้ใช้หนึ่งในโซลูชันอื่น ๆ ในหน้านี้
Jonathan Hartley

การใช้ '-w1' จะไม่เพียงแค่ลบช่องว่างหลังตัวเลข แต่จะตัดทอนหมายเลขบรรทัดให้มีความกว้างเพียงหนึ่งอักขระซึ่งหมายความว่าหมายเลขบรรทัดของคุณจะแสดงเฉพาะตัวเลขที่สำคัญน้อยที่สุดเท่านั้น นี่เป็นสิ่งที่คุณไม่ต้องการอย่างแน่นอน
Jonathan Hartley

4
ด้วย-nlnคุณสามารถปรับชิดซ้ายถ้าคุณไม่ต้องการช่องว่างก่อนหมายเลขบรรทัด นอกจากนี้หากต้องการระบุตัวคั่นแท็บคุณสามารถใช้-s$'\t'หรือ-s' '(แทรกแท็บระหว่างเครื่องหมายคำพูดเดี่ยวctrl+vแล้วtab)
don_crissti

2
@JonathanHartley nl -w1(จาก GNU coreutils 8.24) ไม่ตัดทอนหมายเลขบรรทัด
Skippy le Grand Gourou

10
sed = test.txt | sed 'N;s/\n/\t/'

คำสั่ง "sed =" จะพิมพ์หมายเลขบรรทัดตามด้วยการขึ้นบรรทัดใหม่และบรรทัดถัดไป

นิพจน์ "N; s / \ n / \ t /" จะนำแต่ละบรรทัดรับบรรทัดถัดไป (เช่นหมายเลขบรรทัดและบรรทัด), และแทนที่ carriage return ด้วยแท็บ


พิมพ์เป็น "ตัน" กับแท็บกับรุ่นของฉัน sed ไม่มี: 8t ฉันเห็นจิตใจที่ดีที่สุดของรุ่นของฉันถูกทำลายโดยบ้า 9t หิวโหยตีโพยตีพายเปลือยกาย
ริชาร์ดฮอสกิ้นส์

1
โปรดทราบว่า\nเป็นตัวดึงข้อมูลบรรทัด (โดยทั่วไปเรียกว่า "บรรทัดใหม่" เนื่องจากการใช้งานครั้งแรกอย่างแพร่หลายใน Unix) และ\rเป็นการคืนรถ Windows ใช้\r\n(เรียกอีกอย่างว่าCRLF)
Camilo Martin

(nitpicking Yay!)
Camilo Martin

หากเราจะเข้าไปพูดคุยเกี่ยวกับวิธีการที่หน้าต่างอาจแตกต่างกันเราอาจต้องพิจารณา UTF16
mc0e

4
cat -n <yourfile> | perl -pe "s/^\s*(\d+)\s+/\1\t/"

cat -n เพิ่มผ้าปูที่นอนเป็น "123 linecontents" และที่ regexp ปรับเปลี่ยนเป็น "linenumberTABlinecontents"



2

เกี่ยวกับ

cat -n somefile.txt

?


1
ไม่มีแท็บ (ความคิดเห็นต้อง 15 ตัวอักษรเป็นความต้องการโง่.)
ริชาร์ดฮอสกิ้นส์

1
สิ่งนี้จะสร้างแท็บในระบบของฉัน cat (GNU coreutils) 6.10
innaM

ในระบบของฉันจะเพิ่มบรรทัด (แท็บ) หมายเลข (ช่องว่าง) BSD Utils
ริชาร์ดฮอสกิ้นส์

2

ตกลงนี่คือโซลูชันทุบตีแบบบรรทัดเดียว:

$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=

การตั้งค่า IFS แรกแจ้งให้ทุบตีเพื่ออ่านบรรทัดเต็มในเวลา บรรทัดที่สองรีเซ็ต IFS เป็นค่าเริ่มต้น

ในฐานะโบนัสที่เพิ่มเข้ามามันจะทำงานอย่างสมบูรณ์ในเชลล์ของคุณและไม่ได้รันโปรแกรม!


1

ตกลงเนื่องจากเรากำลังรวบรวมวิธีการทำเช่นนี้

 grep -n . file.txt | sed 's/\(^[0-9]*\):/\1    /g'
 # this is a tab with Ctrl-V + Tab  =====>  ---- 

ตอนนี้ฉันเห็นสิ่งนี้แล้ว ตกลงลบโพสต์ของตัวเอง อะไร? คุณบอกว่า SU ไม่ยอมให้คุณลบโพสต์ของคุณเอง?
เควินเอ็ม

grep + sed == awk
Tadeusz A. Kadłubowski

1
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//'

หรือสำหรับผู้ที่ไม่ใช่ GNU sed:

cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'

พิมพ์ "t" โดยไม่มีแท็บที่มี sed เวอร์ชันของฉัน
ริชาร์ดฮอสกิ้นส์

แก้ไขเพื่อหลบหนีสองครั้ง; ลองแบบนั้น
34299 ความโกลาหล

หากทุกอย่างล้มเหลวเพียงกดแท็บ :) (หรือแท็บ ^ V ถ้าเปลือกของคุณช่วยให้คุณมีปัญหากับที่.)
ความวุ่นวาย

sed: 1: "test.txt": undefined label 'est.txt'
Richard Hoskins

'cat test.txt | sed -e 's / ^ / \\ t /' | แมว -n' พิมพ์ (แท็บ) จำนวน (เว้นวรรค) \ t (สาย)
ริชาร์ดฮอสกิ้นส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.