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

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

6
วิธีการแทนที่รูปแบบที่ N เกิดขึ้นในไฟล์ได้อย่างไร
วิธีแทนที่สตริงที่สามในไฟล์โดยใช้sedคำสั่ง ตัวอย่าง: เปลี่ยนเฉพาะเหตุการณ์ที่สามของisเป็นusในไฟล์ ไฟล์อินพุตของฉันประกอบด้วย: hai this is linux. hai this is unix. hai this is mac. hai this is unchanged. ฉันคาดหวังผลลัพธ์คือ: hai this is linux. hai thus is unix. hai this is mac. hai this is unchanged.

3
ฉันจะลบข้อความทั้งหมดระหว่างวงเล็บปีกกาในไฟล์ข้อความหลายบรรทัดได้อย่างไร
ตัวอย่าง: This is { the multiline text file } that wants { to be changed } anyway. ควรเป็น: This is that wants anyway. ฉันพบเธรดที่คล้ายกัน ในฟอรัม แต่ดูเหมือนว่าจะไม่สามารถใช้กับวงเล็บปีกกาแบบหลายบรรทัดได้ ถ้าเป็นไปได้ฉันต้องการวิธีการหนึ่งบรรทัดเช่นโซลูชันที่ใช้ grep, sed, awk ... เป็นต้น แก้ไข: โซลูชั่นดูเหมือนจะตกลง แต่ฉันได้สังเกตเห็นว่าไฟล์ต้นฉบับของฉันรวมถึงการทำเครื่องหมายวงเล็บปีกกา ดังนั้นฉันกำลังเปิดคำถามใหม่ ขอบคุณทุกคน: ฉันจะลบข้อความทั้งหมดระหว่างวงเล็บปีกกาแบบซ้อนในไฟล์ข้อความแบบหลายบรรทัดได้อย่างไร?

6
วิธีแยกคู่ค่าคีย์จากคำสั่ง ps
ฉันพยายามดึงชื่อแอปพลิเคชันจากpsคำสั่งเช่นนี้: ps -af -u sas |grep "java"| grep -v "grep" และจะสร้างสิ่งต่อไปนี้: sas 24431 1 0 Oct10 ? 00:51:08 /usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java -Denv=DEV -Dapp.name=myApp -Xms512m -Xmx1g -Dlog.dir=/apps/java/logs ฉันพยายามใช้egrepแต่ดูเหมือนจะไม่ทำงาน: ps -af -u sas|grep "java"| grep -v "grep"| egrep -o "-Dapp.name" ฉันจะได้รับเฉพาะ-Dapp.nameค่า "myApp" ได้อย่างไร

4
แทนที่สตริงที่มีอักขระขึ้นบรรทัดใหม่
ด้วยbashเปลือกในไฟล์ที่มีแถวเหมือนคนดังต่อไปนี้ first "line" <second>line and so on ฉันต้องการแทนที่ด้วยหนึ่งครั้งหรือมากกว่านั้น"line"\n<second>ด้วยother charactersและรับในแต่ละครั้ง: first other characters line and so on ดังนั้นผมจึงต้องเปลี่ยนสตริงทั้งที่มีตัวอักษรพิเศษเช่น"และ<และด้วยตัวอักษรขึ้นบรรทัดใหม่ หลังจากค้นหาคำตอบอื่น ๆ ฉันพบว่าsedสามารถยอมรับการขึ้นบรรทัดใหม่ทางด้านขวาของคำสั่ง (เช่นนั้นother charactersสตริง) แต่ไม่ใช่ทางด้านซ้าย มีวิธี (ง่ายกว่านี้ ) ในการรับผลลัพธ์นี้ด้วยsedหรือgrepไม่?

4
จะแทรกบรรทัดของไฟล์ตั้งแต่สองไฟล์ขึ้นไปได้อย่างไร
ฉันพยายามรับไฟล์ 2 ไฟล์ในไฟล์เดียว ฉันได้ลองคำสั่งด้านล่าง: cat file1 file2 แต่ที่นี่ข้อมูลจะถูกผนวกกับfile2file1 สิ่งที่ฉันต้องการคือfile1บรรทัดที่ 1 ตามด้วยfile2บรรทัดแรกและfile1บรรทัดที่สองตามด้วยfile2บรรทัดที่สองเป็นต้น ใครช่วยบอกฉันได้ว่าจะทำในวิธีที่ง่าย?

4
ลบเฉพาะเครื่องหมายจุลภาคที่อยู่ในเครื่องหมายคำพูดคู่
ในไฟล์ข้อความฉันต้องการลบ,(เครื่องหมายจุลภาค) และ"(เครื่องหมายคำพูด) (เฉพาะเมื่อเครื่องหมายคำพูดคู่มีตัวเลขคั่นด้วยเครื่องหมายจุลภาค) 56,72,"12,34,54",x,y,"foo,a,b,bar" ouput ที่คาดหวัง 56,72,123454,x,y,"foo,a,b,bar" หมายเหตุ:ฉันแสดงบรรทัดด้านบนเป็นตัวอย่าง ไฟล์ข้อความของฉันมีหลายบรรทัดเหมือนด้านบนและตัวเลขที่คั่นด้วยเครื่องหมายจุลภาคที่อยู่ในเครื่องหมายคำพูดคู่ควรเปลี่ยนไป นั่นคือ, 56,72,"12,34,54",x,y,"foo,a,b,bar" 56,92,"12,34",x,y,"foo,a,b,bar" 56,72,"12,34,54,78,76,54,67",x,y,"foo,a,b,bar" 56,72,x,y,"foo,a,b,bar","12,34,54" 56,72,x,y,"foo,a,b,bar","12,34,54","45,57,84,92","bar,foo" ผลลัพธ์ที่คาดหวัง: 56,72,123454,x,y,"foo,a,b,bar" 56,92,1234,x,y,"foo,a,b,bar" 56,72,12345478765467,x,y,"foo,a,b,bar" 56,72,x,y,"foo,a,b,bar",123454 56,72,x,y,"foo,a,b,bar",123454,45578492,"bar,foo" มีnตัวเลขอยู่ในเครื่องหมายคำพูดคู่คั่นด้วยเครื่องหมายจุลภาค และยังเว้นเครื่องหมายคำพูดคู่ซึ่งมีอักขระเหมือนเดิม ฉันรักsedเครื่องมือประมวลผลข้อความ ฉันดีใจที่คุณโพสต์sedวิธีแก้ปัญหาสำหรับเรื่องนี้

4
แยกไฟล์และวางไว้ในโครงสร้างข้อมูลที่สอดคล้องกัน?
ฉันมีไฟล์ที่มีบรรทัดเดียวด้านล่าง: {machineA=[0, 1024, 4, 1028], machineB=[1, 1025, 5, 1029]} ที่ฉันมีสองชุดข้อมูล: machineA=[0, 1024, 4, 1028] machineB=[1, 1025, 5, 1029] ตอนนี้ฉันต้องอ่านไฟล์ข้างต้นและแยกมันในแบบที่ฉันสามารถดึงข้อมูลของเครื่องแต่ละเครื่องตามที่กล่าวไว้ข้างต้นและเก็บไว้ในโครงสร้างข้อมูลบางอย่าง ขณะนี้ฉันสับสนโครงสร้างข้อมูลที่ฉันควรใช้ใน bash shell script ถ้าฉันทำสิ่งนี้ใน Java ฉันจะใช้Map<String, Set<String>>แต่ฉันไม่แน่ใจว่าฉันควรใช้อะไรในเชลล์สคริปต์ และหลังจากเก็บไว้ในโครงสร้างข้อมูลฉันต้องวนซ้ำและพิมพ์ผลลัพธ์ ฉันสามารถอ่านไฟล์ด้านบนโดยใช้เชลล์สคริปต์ด้านล่าง: #!/bin/bash while read -r line; do echo "$line" done < data.txt แต่ฉันไม่แน่ใจว่าจะแยกข้อมูลบรรทัดข้างต้นด้วยวิธีดังกล่าวอย่างไรเพื่อให้ฉันสามารถดึงข้อมูลแต่ละเครื่องจากนั้นจัดเก็บไว้ในโครงสร้างข้อมูลบางส่วนได้ UPDATE: - ด้านล่างนี้คือเชลล์สคริปต์ที่ฉันได้รับหลังจากทำตามคำแนะนำที่ได้รับจากเกล็น - #!/bin/bash while read -r line; …

5
แยกไฟล์ข้อความที่คั่นด้วยทุบตีเป็นข้อโต้แย้งคำสั่ง
ฉันมีไฟล์ข้อความแยกย่อยดังนี้: field1,field2,field3 xield1,xield2,xield3 dield1,dield2,dield3 gield1,gield2,gield3 แต่ละคอลัมน์เหล่านี้จะเป็นพารามิเตอร์ของโปรแกรมและฉันต้องการให้โปรแกรมถูกเรียกสำหรับแต่ละบรรทัด ฉันหวังว่าจะวนซ้ำบางอย่างเช่น: for $i in file command $field2 -x $field3 -PN -$field1 >> output done อะไรจะเป็นวิธีที่ดีที่สุดในการบรรลุสิ่งนี้ในทุบตี?

3
แยกไฟล์ข้อความเป็นบรรทัดสั้น ๆ เพื่ออ่าน?
มีโปรแกรมที่สามารถใช้ไฟล์ข้อความธรรมดาที่มีบรรทัดยาวและเพิ่มบรรทัดใหม่หลังจากจำนวนอักขระที่แน่นอนเพียงแค่แยกคำเพื่อให้อ่านได้หรือไม่? ตัวอย่างเช่นใช้สิ่งนี้: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam vel lectus ac enim venenatis porttitor in et est. Curabitur ut eros quis risus consequat dictum a a lectus. Integer ut risus quis augue lobortis molestie vel id nibh. Aliquam sit amet mattis lorem, vel ornare felis. Donec pulvinar …

3
การลบข้อความระหว่างสองสตริงที่ระบุ
ฉันมีไฟล์ดังนี้: mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826 scr PI Name: RRC Access Failures due to UU, Value: 0.13394141 prog PI Name: RRC Access Failures due to UU, Value: 0.16077702 sch PI Name: RRC Access Failures due to UU, Value: 0.11781933 ฉันต้องการที่จะลบข้อความจนถึงPI Value:ฉันเหนื่อย sed '/<PI>/,/<\/Value:>/d' ความช่วยเหลือใด ๆ

4
ฉันจะเขียนซับหนึ่งซับเพื่อเพิ่มอักขระหลังจากอักขระที่สามทุกตัวได้อย่างไร
ดังนั้นฉันมีสตริงที่มีลักษณะเช่นนี้: AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUGA และฉันต้องการแยกสตริงออกเป็น 3 ตัวอักษรที่คั่นด้วยเครื่องหมาย '+' AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UGA sedและฉันต้องการที่จะทำอย่างนั้นกับเพื่อนที่ดีของฉัน ฉันเหนื่อย cat codons | sed -r 's/([A-Z]\{3\})/\1\+/g' ... ไม่ประสบความสำเร็จ sedฉันสามารถใช้คำสั่งอะไรได้บ้าง

3
จะค้นหาความแตกต่างระหว่างการประทับเวลาสองครั้งได้ถึงมิลลิวินาทีได้อย่างไร
ฉันใหม่สำหรับการเขียนสคริปต์เชลล์ หัวใจของสคริปต์ของฉันคือการหาความแตกต่างระหว่างการประทับเวลาสองครั้งจนถึงมิลลิวินาที กับฉันฉันมีไฟล์ที่มีเนื้อหาของการประทับเวลาเท่านั้นเช่น 2012-09-13 15:00:29,290 2012-09-13 15:00:29,297 2012-09-13 15:00:29,428 2012-09-13 15:00:29,447 เช่นนี้ฉันมีบันทึกประมาณ 30k ซึ่งฉันไม่ควรประสบปัญหาด้านประสิทธิภาพเมื่อรันสคริปต์ ปัจจัยหลายอย่างเช่นปีอธิกสุรทินเดือนที่มี 31 วันและอื่น ๆ เข้ามาในรูปภาพเมื่อฉันพยายามเขียนสคริปต์สำหรับเรื่องนี้ ใครสามารถช่วยฉันในเรื่องนี้ได้ไหม

1
การค้นหาข้อความที่ไม่ถูกต้อง
มีประโยชน์เช่นgrepหรือแม้กระทั่งuniqสำหรับการค้นหาที่ไม่แน่นอนหรือฉันควรเขียนเอง? ฉันหมายถึงมันจะดูการจับคู่ 90% (ตัวเลขอาจเปลี่ยนแปลง) หรืออะไรทำนองนั้น ตัวอย่างเช่นฉันมีไฟล์ที่มีหลายสตริง: abc123 abd123 abc223 qwe938 ในกรณีนี้ยูทิลิตี้ดังกล่าวควรส่งคืนสามสตริงแรกหรือบอกว่าคล้ายกัน แน่นอนผมไม่ทราบว่ารูปแบบใด ๆ ของเนื้อหาของไฟล์เช่นในกรณีที่มีหรือgrepuniq

3
การแทนที่สตริงในไฟล์ที่มีขนาดใหญ่มาก
ฉันมี URL จำนวนมากที่ไม่มีตัวคั่นในรูปแบบเดียวกับด้านล่าง: http://example.comhttp://example.nethttp://example.orghttp://etc... ฉันต้องการให้แต่ละ URL อยู่ในบรรทัดใหม่ ฉันพยายามทำสิ่งนี้โดยแทนที่ "http: //" ด้วย "\ nhttp: //" โดยใช้ sed sed 's_http://_\nhttp://_g' urls.txt แต่เกิดข้อผิดพลาดในการแบ่งกลุ่ม (การละเมิดหน่วยความจำ) ฉันสามารถคาดเดาได้ว่าขนาดไฟล์ที่แท้จริง (เกิน 100GB) ทำให้เกิดความผิดเพี้ยนเกินขีด จำกัด ฉันสามารถแบ่งไฟล์ออกเป็นไฟล์เล็ก ๆ หลาย ๆ ไฟล์เพื่อการประมวลผลได้ แต่อินสแตนซ์ทั้งหมดของ "http: //" จะต้องถูกเก็บรักษาไว้เหมือนเดิม มีวิธีที่ดีกว่าในการทำเช่นนี้?

7
วิธีการรวมข้อความของบรรทัดที่เป็นตัวอักษรเข้ากับบรรทัดที่เป็นตัวเลขในเชลล์?
ฉันมีไฟล์ที่มีข้อความเช่นนี้: AAAA BBBB CCCC DDDD 1234 5678 9012 3456 EEEE 7890 ฯลฯ ... และฉันต้องการจับคู่ตัวอักษรกับบรรทัดตัวเลขเพื่อให้เป็นเช่นนี้: AAAA 1234 BBBB 5678 CCCC 9012 DDDD 3456 EEEE 7890 ไม่มีใครรู้วิธีง่ายๆในการบรรลุเป้าหมายนี้หรือไม่?

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