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

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

4
วิธีที่จะทำให้การค้นหาสตริงด้วยคำสั่ง grep เป็นคำสั่ง if?
ฉันต้องการค้นหาหลายสายในสองไฟล์ หากพบหนึ่งสตริงในไฟล์ทั้งสองให้สร้างบางอย่าง หากพบหนึ่งสตริงในไฟล์เดียวให้สร้างอีกอย่าง คำสั่งของฉันคือต่อไป: ####This is for the affirmative sentence in both files if grep -qw "$users" "$file1" && grep -qw "$users" "$file2"; then ####This is for the affirmative sentence in only one file, and negative for the other one if grep -qw "$users" "$file1" ! grep -qw "$users" "$file2"; …

8
ตรวจสอบไฟล์ทุกบรรทัดว่าไม่ซ้ำใคร
ฉันมีไฟล์ข้อความที่มีบรรทัดเช่นนี้: This is a thread 139737522087680 This is a thread 139737513694976 This is a thread 139737505302272 This is a thread 139737312270080 . . . This is a thread 139737203164928 This is a thread 139737194772224 This is a thread 139737186379520 ฉันจะมั่นใจได้ถึงความมีเอกลักษณ์ของทุกบรรทัดได้อย่างไร หมายเหตุ:เป้าหมายคือเพื่อทดสอบไฟล์ไม่ใช่เพื่อแก้ไขหากมีบรรทัดที่ซ้ำกันอยู่

3
วิธีใช้ grep เพื่อค้นหาบรรทัดที่มีหนึ่งในสองคำ แต่ไม่ใช่ทั้งสองอย่าง?
ฉันต้องการค้นหาบรรทัดด้วย 'word1' XOR 'word2' ในไฟล์ข้อความ ดังนั้นควรแสดงผลลัพธ์ด้วย word1, word2 แต่ไม่ใช่บรรทัดที่มีทั้งสองคำนี้ ฉันต้องการใช้ XOR แต่ฉันไม่รู้วิธีเขียนในบรรทัดคำสั่ง linux ฉันเหนื่อย: grep 'word1\|word2' text.txt grep word1 word2 text.txt grep word1 text.txt | grep word2 grep 'word1\^word2' text.txt และอื่น ๆ อีกมากมาย แต่ไม่สามารถทำได้

8
นับจำนวนบรรทัดว่างที่ท้ายไฟล์
ฉันมีไฟล์ที่มีบรรทัดว่างที่ท้ายไฟล์ ฉันสามารถใช้grepเพื่อนับจำนวนบรรทัดว่างท้ายไฟล์ด้วยชื่อไฟล์ที่ถูกส่งเป็นตัวแปรในสคริปต์ได้หรือไม่

7
ฉันจะแก้ไขบรรทัดที่แตกในตำแหน่งที่ไม่ถูกต้องได้อย่างไร
ไฟล์ข้อความของฉันมีลักษณะเช่นนี้: This is one sentence that is broken. However this is a good one. And this one is somehow, broken into many. ฉันต้องการลบอักขระบรรทัดใหม่ต่อท้ายสำหรับบรรทัดใด ๆ ที่ตามด้วยบรรทัดที่ขึ้นต้นด้วยตัวอักษรตัวพิมพ์เล็ก ดังนั้นควรเป็น: This is one sentence that is broken. However this is a good one. And this one is somehow, broken into many. ฉันจะทำสิ่งนี้ได้อย่างไร แก้ไข: มีคำตอบที่ดีจริงๆที่นี่ …

9
เปลี่ยนลำดับของบรรทัดในไฟล์
ฉันพยายามเปลี่ยนลำดับของเส้นในรูปแบบเฉพาะ การทำงานกับไฟล์ที่มีหลายบรรทัด (เช่น 99 บรรทัด) สำหรับทุกสามบรรทัดฉันต้องการให้บรรทัดที่สองเป็นบรรทัดที่สามและบรรทัดที่สามจะเป็นบรรทัดที่สอง ตัวอย่าง. 1- อินพุต: gi_1234 My cat is blue. I have a cat. gi_5678 My dog is orange. I also have a dog. ... 2- เอาท์พุท: gi_1234 I have a cat. My cat is blue. gi_5678 I also have a dog. My dog is orange. …

7
วิธีรับบรรทัดแรกของไฟล์ข้อความอินพุตขณะลบบรรทัดนั้นจากไฟล์ข้อความ
ฉันจะรับบรรทัดแรกของไฟล์ข้อความอินพุตขณะลบบรรทัดนั้นจากไฟล์ข้อความได้อย่างไร ถ้าฉันมีไฟล์ข้อความ/myPathToTheFile.txtแบบนี้ ► put returns between paragraphs ► for linebreak add 2 spaces at end ► _italic_ or **bold** ฉันต้องการรับบรรทัดนี้เป็นผลลัพธ์ ► put returns between paragraphs และไฟล์ข้อความของฉันควรเป็นแบบนี้ ► for linebreak add 2 spaces at end ► _italic_ or **bold*

5
มีทางเลือกอื่นสำหรับคำสั่ง "sed -i" ใน Solaris หรือไม่?
ฉันมีข้อกำหนดในโครงการของฉันเพื่อแทนที่ข้อความที่มีอยู่ในไฟล์เช่นเดียวfooกับข้อความอื่น ๆ เช่นfooofoo: abc.txt name foo foo1 ดังนั้นฉันจึงพยายาม: sed -i "s/foo/fooofoo/g" abc.txt อย่างไรก็ตามฉันได้รับข้อผิดพลาดนี้: sed: ตัวเลือกที่ผิดกฎหมาย - i ฉันพบในคู่มือที่ต้องใช้: sed -i\ "s/foo/fooofoo/g" abc.txt อย่างไรก็ตามสิ่งนี้ไม่ทำงานเช่นกัน ฉันได้พบทางเลือกในperlและawkอีกวิธีหนึ่ง แต่โซลูชั่นใน Solaris sedจะได้รับการชื่นชมมาก ฉันใช้ทุบตีรุ่นนี้: GNU bash รุ่น 3.2.57 (1) - ปล่อย (sparc-sun-solaris2.10)

8
ย้าย N บรรทัดแรกของเอาต์พุตไปยังจุดสิ้นสุดโดยไม่ต้องใช้ไฟล์ชั่วคราว
ลองนึกภาพผลลัพธ์ของคำสั่งเช่น 44444 55555 11111 22222 33333 ฉันจะดึงบรรทัด N แรกออกมาได้อย่างไร (สองบรรทัดแรกในตัวอย่างด้านบน) และต่อท้ายบรรทัด แต่ไม่ต้องใช้ไฟล์ temp ( โดยใช้ไพพ์เท่านั้น) 11111 22222 33333 44444 55555 บางสิ่งบางอย่างตามแนวของ| sed -n '3,5p;1,2p'(ซึ่งเห็นได้ชัดว่าใช้งานไม่ได้เพราะความใจร้อนไม่สนใจคำสั่งของคำสั่ง)

1
วิธีจัดเรียงไฟล์ตามส่วนของฟิลด์
ฉันต้องการเรียงลำดับไฟล์: D104HN-D104HA 8.320 4.521 1.69e+05 -- D104HN-D104HB* 8.320 2.823 2.93e+05 -- A90HB#-A90HA 1.655 4.207 7.12e+05 -- A90HB#-F91HA 1.653 4.411 8.59e+04 -- A114HB#-A114HA 1.253 4.098 7.67e+05 -- A114HB#-R111HA 1.251 3.929 1.76e+05 -- A114HB#-W110HA 1.253 4.451 3.68e+04 -- F91HE*-F91HZ 7.237 7.122 7.85e+05 -- F91HE*-K92HA 7.242 3.910 4.88e+04 -- และรับสิ่งนี้ A90HB#-A90HA 1.655 4.207 …

8
ลบบรรทัดแบบแทนที่ในระบบไฟล์แบบเต็ม?
เนื่องจากข้อผิดพลาดของแอปพลิเคชั่นที่ยังไม่ได้ถูกเปิดเผยฉันมีเซิร์ฟเวอร์หลายร้อยเครื่องพร้อมดิสก์เต็มรูปแบบ มีไฟล์หนึ่งไฟล์ที่เต็มไปด้วยบรรทัดที่ซ้ำกันไม่ใช่ไฟล์บันทึก แต่เป็นไฟล์สภาพแวดล้อมผู้ใช้ที่มีคำจำกัดความของตัวแปร (ดังนั้นฉันจึงไม่สามารถลบไฟล์ได้) ฉันเขียนsedคำสั่งง่ายๆเพื่อตรวจสอบหาบรรทัดที่เพิ่มผิดและลบออกแล้วทดสอบในสำเนาของไฟล์ มันทำงานได้ตามที่ตั้งใจไว้ อย่างไรก็ตามเมื่อฉันลองบนเซิร์ฟเวอร์ด้วยดิสก์เต็มฉันได้รับข้อผิดพลาดดังต่อไปนี้ (มาจากหน่วยความจำไม่ใช่คัดลอกและวาง): sed: couldn't flush /path/to/file/sed8923ABC: No space left on deviceServerHostname แน่นอนฉันรู้ว่าไม่มีพื้นที่เหลือ นั่นเป็นเหตุผลที่ฉันพยายามลบเนื้อหา! ( sedคำสั่งที่ฉันใช้จะลดไฟล์บรรทัด 4000+ เป็นประมาณ 90 บรรทัด) sedคำสั่งของฉันเป็นเพียงsed -i '/myregex/d' /path/to/file/filename มีวิธีที่ฉันสามารถใช้คำสั่งนี้แม้จะมีดิสก์เต็มหรือไม่? (ต้องเป็นแบบอัตโนมัติเนื่องจากฉันต้องใช้กับเซิร์ฟเวอร์หลายร้อยเครื่องเพื่อแก้ไขปัญหาอย่างรวดเร็ว) (เห็นได้ชัดว่าข้อผิดพลาดของแอปพลิเคชันจะต้องได้รับการวินิจฉัย แต่ในขณะเดียวกันเซิร์ฟเวอร์ก็ทำงานไม่ถูกต้อง .... ) อัปเดต:สถานการณ์ที่ฉันเผชิญได้รับการแก้ไขโดยการลบสิ่งอื่นที่ฉันพบว่าฉันสามารถลบได้ แต่ฉันยังต้องการคำตอบสำหรับคำถามนี้ซึ่งจะเป็นประโยชน์ในอนาคตและสำหรับคนอื่น ๆ /tmpคือไม่ต้องไป มันอยู่ในระบบไฟล์เดียวกัน ก่อนที่ผมจะอิสระขึ้นพื้นที่ดิสก์ที่ผมได้ทดสอบและพบว่าฉันสามารถลบบรรทัดในviโดยการเปิดไฟล์และทำงานแล้วประสบความสำเร็จในการบันทึกการเปลี่ยนแปลงด้วย:g/myregex/d :wqดูเหมือนว่าเป็นไปได้ที่จะทำสิ่งนี้โดยอัตโนมัติโดยไม่ต้องใช้ระบบไฟล์แยกต่างหากเพื่อเก็บไฟล์ temp .... (?)

5
วิธีการพิมพ์เนื้อหาไฟล์เฉพาะในกรณีที่บรรทัดแรกตรงกับรูปแบบที่แน่นอน?
ฉันกำลังเขียนสคริปต์ฉันต้องการตรวจสอบว่าบรรทัดแรกของไฟล์ตรงกับรูปแบบที่กำหนดหรือไม่และถ้าพิมพ์ออกมาเป็นไฟล์หรือไม่ ฉันจะบรรลุสิ่งนี้ได้อย่างไร ฉันจะตรวจสอบรูปแบบได้อย่างไร มีวิธีตรวจสอบรูปแบบและทำตามสิ่งที่ส่งออกหรือไม่ .. แก้ไข: โปรดดูคำถามนี้: /programming/5536018/how-to-get-match-regex-pattern-using-awk-from-file ฉันต้องการสิ่งนี้ แต่ไม่มีใครทำงานให้ฉันได้ โดยทั่วไปฉันต้องการตรวจสอบว่าบรรทัดแรกตรงกับรูปแบบ regex หรือไม่และขึ้นอยู่กับว่าพิมพ์บรรทัดของไฟล์

6
ลบบรรทัดออกจากไฟล์โดยขึ้นอยู่กับบรรทัดที่พบในไฟล์อื่น
ไฟล์ file1.txt มีบรรทัดเช่น: /api/purchase/<hash>/index.html ตัวอย่างเช่น: /api/purchase/12ab09f46/index.html ไฟล์ file2.csv มีบรรทัดเช่น: <hash>,timestamp,ip_address ตัวอย่างเช่น: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 ฉันต้องการกรอง file2.csv ลบบรรทัดทั้งหมดที่มีค่าแฮชอยู่ใน file1.txt กล่าวได้ว่า: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv หรืออะไรทำนองนี้ มันควรจะตรงไปตรงมา แต่ดูเหมือนว่าฉันจะไม่สามารถใช้งานได้ ใครช่วยกรุณาให้ขั้นตอนการทำงานสำหรับงานนี้ได้ไหม

4
พิมพ์หน้าคนที่มีความกว้างคงที่
ด้วยคำสั่งตัวอย่าง man apropos > outputfile ไฟล์ข้อความจะถูกสร้างขึ้นซึ่งมีหน้าที่จัดรูปแบบmanของapropos(มีความแตกต่างเล็กน้อยเกี่ยวกับการman aproposพิมพ์โดยตรงบนหน้าจอเช่นตัวหนา) แต่ฉันต้องการตั้งค่าความกว้างบรรทัดสูงสุดของไฟล์เอาต์พุตที่สร้างขึ้นด้วยตนเองเพื่อให้ย่อหน้าทั้งหมดจะถูกปรับความกว้างนั้น manหน้าถูกสร้างขึ้นผ่านgroff: ตัวอย่างเช่นฉันพยายามวางไว้.ll 50ก่อนหน้าย่อหน้าของไฟล์ต้นฉบับดั้งเดิม.gz manแต่มันก็เล็กน้อยถ้าฉันต้องทำงานกับหลาย ๆmanหน้า ยิ่งไปกว่านั้นตัวละครทุกตัวไม่ได้รับการยอมรับ: apropos.1:45: warning: can't find character with input code 195 apropos.1:45: warning: can't find character with input code 168 apropos.1:47: warning: can't find character with input code 178 apropos.1:131: warning: can't find character with input code 169 …

3
ฉันจะรวมค่าจากสองคอลัมน์เข้าด้วยกันได้อย่างไร
ฉันมีไฟล์ในรูปแบบต่อไปนี้: $ cat /tmp/raw 2015-01 5000 1000 2015-02 6000 2000 2015-03 7000 3000 ตอนนี้สิ่งที่ฉันต้องการคือการได้รับค่ารวมจากคอลัมน์ 2 และ 3 ในแต่ละแถวเพื่อให้ผลลัพธ์มีดังนี้: 2015-01 6000 2015-02 8000 2015-03 9000 ฉันลองมัน แต่มันจะแสดงเฉพาะค่าสุดท้ายในไฟล์เช่นค่า 2015-03

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