คำถามติดแท็ก text-processing

การจัดการหรือตรวจสอบข้อความโดยโปรแกรมสคริปต์ ฯลฯ

1
วิธีการติดตาม (a la“ tail -f”) เป็นไฟล์ไบนารี่ตั้งแต่ต้น?
เป็นไปได้หรือไม่ที่จะติดตามไฟล์ไบนารีตั้งแต่เริ่มต้น a la tail -f? สิ่งนี้มีประโยชน์ในบางกรณีเช่นหากฉันกำลังscpส่งไฟล์ไปยังเซิร์ฟเวอร์ระยะไกลและในเวลาเดียวกันฉันต้องการให้ฟีดไปยังกระบวนการอื่น (ใช่ฉันรู้ว่าฉันสามารถใช้ssh+ catเทคนิค) เท่าที่ฉันอ่านจาก FM tailจะเขียนโดยมีไฟล์ข้อความอยู่ในใจ มีวิธีง่ายๆในการดำเนินการดังกล่าวโดยใช้เครื่องมือ posix มาตรฐาน?


2
วิธีแทนที่แท็บทั้งหมดในแต่ละไฟล์ในสาขาระบบไฟล์ด้วย 2 ช่องว่างแต่ละอัน?
ฉันใช้รหัสสกาล่าและการประชุมคือใช้ช่องว่างสองครั้งต่อระดับเพื่อระบุตัวตน แต่การใช้เครื่องมือแก้ไขที่แตกต่างกันทำให้แหล่งข้อมูลของฉันเต็มไปด้วยการผสมผสานของช่องว่างและแท็บ ฉันต้องการ refactor ไฟล์ทั้งหมด (* .scala ไฟล์จริง แต่การระบุนี้ไม่จำเป็น) (ในไดเรกทอรีที่กำหนดและสาขา FS พื้นฐานทั้งหมด (แบบเรียกซ้ำ)) โดยอัตโนมัติแทนที่แท็บทั้งหมดด้วยช่องว่างสองครั้ง ฉันเชื่อว่ามีวิธีที่ง่ายและสวยงามในการทำเช่นนี้กับเครื่องมือ Unix / GNU แบบคลาสสิก แต่ฉันไม่มีประสบการณ์ในด้านนี้ คุณจะกรุณาช่วยฉันได้อย่างไร

2
บรรทัด `uniq 'ของฉันหรือ` sort -u' หายไปไหนด้วยอักขระ Unicode บางตัว
เกิดอะไรขึ้นในข้อมูลโค้ดต่อไปนี้ ฉันไม่ได้รับผลลัพธ์ที่คาดหวัง ฉันคิดว่ามันเป็นข้อผิดพลาด แต่มันเกิดขึ้นสำหรับ 2 โปรแกรมที่แตกต่างกัน (uniq และ sort) ดังนั้นฉันสงสัยว่ามันเป็นบางสิ่งที่ต้องทำกับ ... อืมฉันไม่รู้ว่า ... ดังนั้นคำถาม ตัวอย่าง 3 (4 จาก) แรกทำงานได้ แต่ 4 ล้มเหลว! ฉันคาดว่าจะมีพฤติกรรมแบบเดียวกันสำหรับตัวละครทุกตัว กล่าวคือ เพื่อพิมพ์ 2 บรรทัด (จากอินพุต 3 บรรทัด) ... แต่ในกรณีที่ 4 ฉันได้รับเพียง 1 บรรทัด (สำหรับทั้งคู่sort -uและuniq); สอง lins ที่เหมือนกันเพิ่งหายไป! ฉันได้แปลงเอาท์พุท '\ n' เป็นพื้นที่เพื่อความกะทัดรัด ฉันใช้uniqและเรียงลำดับจาก (GNU coreutils) 7.4 ... …

3
แทนที่ช่องว่างสีขาวทั้งหมดด้วยเครื่องหมายจุลภาคในไฟล์ข้อความ
ฉันต้องการแทนที่ช่องว่างสีขาวทั้งหมดภายในข้อความด้วยเครื่องหมายจุลภาค ฉันใช้บรรทัดนี้อยู่ในขณะนี้ แต่ใช้งานไม่ได้: ฉันได้รับเป็นไฟล์ข้อความที่เหมือนกันกับไฟล์ต้นฉบับ: sed 's/[:blank:]+/,/g' orig.txt > modified.txt ขอบคุณ

6
มีทางเลือกอื่นใดสำหรับสวิตช์ -A -B -C grep ของ (เพื่อพิมพ์สองสามบรรทัดก่อนและหลัง)?
grep -A 2 -B 3 พิมพ์ 2 บรรทัดหลังสตริง grep และพิมพ์ 3 บรรทัดก่อนหน้า grep -C 3 พิมพ์ 3 บรรทัดก่อนหน้าและ 3 บรรทัดหลัง น่าเสียดายที่grepฉันใช้ไม่รองรับตัวเลือกเหล่านี้ มีคำสั่งหรือสคริปต์ทางเลือกอื่นที่สามารถจำลองได้หรือไม่? ใช้sed/ awk/ perl/ เชลล์สคริปต์หรือไม่

3
ฉันจะรับรายการและลบออกจากไฟล์ได้อย่างไร
ฉันมีรายชื่อโดเมนจำนวนมากที่ฉันต้องลบออกจาก / etc / remotedomains พวกมันอาจจะไม่เรียงตามลำดับใด ๆ ในไฟล์ แต่ละโดเมนอยู่บนบรรทัดเดียว ฉันจะวนซ้ำในรายการและค้นหาบรรทัดนั้นในโดเมนระยะไกลและลบออกได้อย่างไร

4
การเพิ่มบรรทัดข้อความให้กับหลาย ๆ ไฟล์
ดังนั้นฉันมีไฟล์จำนวนมากในไดเรกทอรีและฉันต้องแทรกบรรทัดข้อความลงในแต่ละไฟล์ พวกเขามีรูปแบบต่อไปนี้เป็นหลัก: <VirtualHost *:80> ServerAdmin gabe@localhost DocumentRoot /var/www/test1 ServerName test1.local ServerAlias test1 <Directory "/var/www/test1"> Options All AllowOverride All </Directory> </VirtualHost> และฉันต้องการแทรกบรรทัดก่อนปิด </ VirtualHost>แท็ก ข้อสันนิษฐานแรกของฉันคือฉันควรจะสามารถทำสิ่งนี้ด้วย sed อาจจับคู่และแทนที่แท็กนั้น ฉันจะเริ่มลองตอนนี้ แต่ถ้าใครมีวิธีการทำเช่นนี้อยู่ฉันก็อยากได้ยิน

6
ประมวลผลไฟล์ / etc / passwd เพื่อแสดงรายการผู้ใช้ทั้งหมดที่มีโฮมโฟลเดอร์อยู่ใน / home
ฉันมีตัวอย่างไฟล์ / etc / passwd ดังนี้: tom:x:1000:1000:Work:/home/tom:/bin/bash george:x:1000:1000:Work:/home/george:/bin/bash bla:x:1000:1000:Work:/home/bla:/bin/bash boo:x:1000:1000:Work:/home/boo:/bin/bash bee:x:1000:1000:Work:/root/list:/bin/bash /home/ฉันพยายามที่จะแสดงรายชื่อผู้ใช้ทั้งหมดที่มีบ้านในโฟลเดอร์ ฉันเขียน cat ~/Desktop/e.txt |awk -F ":" '{if ($6 ~/^/home/) print $1;}' โดยที่ e.txt เป็นข้อความที่ฉันคัดลอกมาที่นี่ ฉันเข้าใจว่ามีปัญหากับแบ็กสแลชซึ่งเป็นอักขระการหลบหนี แต่ฉันจะแก้ไขได้อย่างไรเพื่อให้สามารถแสดงรายการเหล่านั้นในหนึ่งบรรทัดของคำสั่งได้

1
ระบุกลุ่มข้อความที่ซ้ำกันภายในไฟล์
มีวิธีที่สะดวกในการระบุการทำซ้ำหรือใกล้บล็อคข้อความที่ซ้ำกันภายในไฟล์หรือไม่? ฉันต้องการใช้สิ่งนี้เพื่อระบุการทำสำเนารหัส ดูเหมือนว่ามีโปรแกรมพิเศษที่มีความสามารถนี้ แต่ฉันไม่ต้องการเข้าไปเกี่ยวข้อง ฉันหวังว่าจะมีเครื่องมือคล้ายกับ diff ที่จะสามารถจัดเรียง "ภายในไฟล์" diff ยิ่งไปกว่านั้นจะเป็นไฟล์ภายใน vimdiff

2
การรวมคอลัมน์จากสองไฟล์แยกกัน
วิธีสร้างไฟล์ใหม่ที่ผสานคอลัมน์เลือกจากสองไฟล์โดยใช้ awk? โดยไม่ทำให้คำสั่งซื้อองค์ประกอบของไฟล์ BOTH ยุ่งเหยิง ตัวอย่าง: ไฟล์ 3 อาจมีคอลัมน์ 1,2,3 จากไฟล์ 1 และคอลัมน์ 4 จากไฟล์ 2 File 1 A 23 8 T A 63 9 9 B 45 3 J File 2 A 0 A 6 B 5 File 3 A 23 8 0 A 63 9 6 B 45 …

6
ฉันจะลบบรรทัดใหม่ต่อท้ายในทุบตีได้อย่างไร
ฉันกำลังมองหาสิ่งที่ชอบทำตัวของ chompPerl ฉันกำลังมองหาคำสั่งที่พิมพ์เพียงแค่อินพุตลบอักขระตัวสุดท้ายหากเป็นบรรทัดใหม่: $ printf "one\ntwo\n" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done $ printf "one\ntwo" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done (การทดแทนคำสั่งใน Bash และ Zsh ลบบรรทัดใหม่ที่ตามมาทั้งหมด แต่ฉันกำลังมองหาบางสิ่งที่จะลบบรรทัดใหม่ที่ต่อท้ายหนึ่งบรรทัด)

3
ประมวลผลไฟล์ที่ขึ้นต้นด้วย BOM (FF FE)
ฉันได้รับไฟล์. csv พร้อมFF FEBOM: $ head -n1 dotan.csv | hd 00000000 ff fe 41 00 64 00 20 00 67 00 72 00 6f 00 75 00 |..A.d. .g.r.o.u.| เมื่อใช้awkในการแยกมันฉันได้รับพวงไบต์ว่างซึ่งฉันสงสัยว่าเกิดจากการสั่งไบต์ ฉันจะสลับลำดับไบต์บนไฟล์นี้ (โดยใช้ CLI) เพื่อให้เครื่องมือปกติทำงานได้อย่างไร โปรดทราบว่าฉันคิดว่าไฟล์นี้เป็นอักขระ ASCII เท่านั้น (ยกเว้น BOM) แต่ฉันไม่สามารถยืนยันได้อย่างที่grepคิดว่าเป็นไฟล์ไบนารี: $ grep -P '^[\x00-\x7f]' dotan.csv Binary file dotan.csv matches การค้นหาสตริงเดียวกันใน …

3
แทนที่สตริงด้วยดัชนีตามลำดับ
ใครสามารถแนะนำวิธีที่สง่างามเพื่อให้บรรลุนี้ การป้อนข้อมูล: test instant () test instant () ... test instant () //total 1000 lines ผลลัพธ์ควรเป็น: test instant1 () test instant2 () test instant1000() บรรทัดว่างอยู่ในไฟล์อินพุตของฉันและมีไฟล์จำนวนมากภายใต้ไดเรกทอรีเดียวกันที่ฉันต้องดำเนินการในครั้งเดียว ฉันพยายามทำสิ่งนี้เพื่อแทนที่ไฟล์จำนวนมากใน dir เดียวกันและไม่ทำงาน for file in ./*; do perl -i -000pe 's/instance$& . ++$n/ge' "$file"; done ข้อผิดพลาด: Substitution replacement not terminated at -e line 1. …

2
คำสั่ง sed พื้นฐานสำหรับไฟล์บรรทัดเดียวขนาดใหญ่: ไม่สามารถจัดสรรหน่วยความจำใหม่ได้
ฉันมีไฟล์ข้อความ 250 MB ทั้งหมดนี้อยู่ในบรรทัดเดียว ในไฟล์นี้ฉันต้องการแทนที่aตัวละครด้วยbตัวอักษร: sed -e "s/a/b/g" < one-line-250-mb.txt มันล้มเหลวด้วย: sed: couldn't re-allocate memory สำหรับฉันดูเหมือนว่างานประเภทนี้สามารถดำเนินการแบบอินไลน์โดยไม่ต้องจัดสรรหน่วยความจำมาก มีเครื่องมือที่ดีกว่าสำหรับงานหรือวิธีการใช้ที่ดีกว่าsedหรือไม่? GNU sed เวอร์ชั่น 4.2.1 Ubuntu 12.04.2 LTS RAM 1 GB

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