เติม ## กับทุกบรรทัดในไฟล์ข้อความ


30

ฉันต้องการเพิ่มแฮชในบรรทัดทั้งหมดในไฟล์ข้อความปกติ ฉันใช้ได้กับทั้งการใช้งานเทอร์มินัลและ GUI - ฉันแค่ต้องทำให้เสร็จ

คำตอบ:


50

คุณสามารถใช้sedเพื่อ:

sed -i.bak 's/^/##/' file

นี้แทนที่จุดเริ่มต้นของบรรทัด ( ^) ##ด้วย

ด้วย-i.bakสวิทช์sedแก้ไขไฟล์ในสถานที่ .bakแต่สร้างสำเนาสำรองที่มีนามสกุล


1
+1 นี่เป็นครั้งแรกที่ฉันพบวิธีสำรองข้อมูลนี้ ฉันทำแบบอินไลน์แทนโดยตรงsed 's/^/##/' -i fileเสมอ: . ในกรณีนี้จะเป็นที่ต้องการเนื่องจากไม่ผิดพลาด ในกรณีอื่นคำสั่งนี้สามารถใช้ร่วมกับdiff -u file.bak fileเพื่อดูความแตกต่าง (ถ้าจำเป็นให้ไพพ์ผ่านless) หากยืนยันว่าใช้งานได้จะสามารถลบข้อมูลสำรองได้ mv file.bak fileมิฉะนั้นก็จะได้รับการบูรณะด้วยง่าย
Lekensteyn

1
สง่า ฉันกำลังคิดเกี่ยวกับบางสิ่งบางอย่างเหมือนsed 's/^\(.*\)$/##\1/'กัน
จัดการ

นีซหนึ่ง .. ฉันคิดเกี่ยวกับการแนะนำเป็นกลุ่มที่จะทำนี้ ...
Sathish

สิ่งนี้ช่วยให้ฉันแปลงไฟล์รายการบล็อก :) ขอบคุณ 1+
Neil

8

นี่คือวิธีการแก้ปัญหานี้โดยใช้ Perl

perl -e 'while (<>) {print "##$_"}' < infile > outfile

2
สวิทช์ยังมีประโยชน์:-p perl -pe 's/^/##/' infile > outfile(นอกจากนี้ยังมี-i[extension]สวิตช์สำหรับแทนที่ไฟล์เป้าหมายในสถานที่) perldoc.perl.org/perlrun.html#%2a-p%2a
Jukka Matilainen


4

นี่คือbashวิธี:

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( ในbashเชลล์การรันread -rโดยไม่มีอาร์กิวเมนต์อื่นทำงานเหมือนIFS= read -r REPLY)

สิ่งนี้ได้รับแรงบันดาลใจมาจากโซลูชั่น perl ของ beav_35ซึ่งฉันยอมรับว่าอาจทำงานได้เร็วขึ้นมากสำหรับไฟล์ขนาดใหญ่เนื่องจากperlคาดว่าจะมีประสิทธิภาพมากกว่าเชลล์เมื่อพูดถึงการประมวลผลข้อความ


3

sed -iไม่ใช่ POSIX-standard ดังนั้นถ้าคุณเป็นคนเจ้าระเบียบคุณจะต้องการใช้ed:

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

นี่เป็นperlวิธีที่ง่ายกว่าการนำเสนอที่อื่น:

perl -pi -e 'print "##"' YOURFILEHERE

นี้ (AB) ใช้ความจริงที่ว่าพิมพ์บรรทัดหลังจากรันคำสั่งที่กำหนดในperl -p-e



0

สามารถทำได้ด้วยฟังก์ชั่นการทำแผนที่ของงูใหญ่และการเปลี่ยนเส้นทาง stdin:

$ cat input.txt                                                                                                          
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))'  < input.txt                         
##lorem ipsum
##quick brown fox
##hello world

บันทึกผลลัพธ์เป็นไฟล์ใหม่และใช้แทนต้นฉบับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.