คำถามติดแท็ก perl

Perl เป็นภาษาการเขียนโปรแกรมแบบไดนามิกระดับสูงที่มีวัตถุประสงค์ทั่วไปตีความ เดิมพัฒนาโดย Larry Wall เป็นภาษาสคริปต์ Unix วัตถุประสงค์ทั่วไปเพื่อให้การประมวลผลรายงานง่ายขึ้นในช่วงเวลาที่ได้รับการสนับสนุนจากชุมชนโอเพ่นซอร์สมันได้พัฒนาและครบกำหนดเพื่อใช้สำหรับการเขียนโปรแกรมกราฟิกการบริหารระบบการเขียนโปรแกรมเครือข่ายการเงิน ชีวสารสนเทศศาสตร์และการประยุกต์ด้านวิศวกรรมอื่น ๆ

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. ฉันจะทำสิ่งนี้ได้อย่างไร แก้ไข: มีคำตอบที่ดีจริงๆที่นี่ …

3
Regex & Sed / Perl: จับคู่คำที่ไม่นำหน้าด้วยคำอื่น
ฉันต้องการใช้sedหรือperlแทนที่คำทั้งหมดที่ไม่มีคำที่อยู่ข้างหน้า ตัวอย่างเช่นฉันมีไฟล์ข้อความที่มีเนื้อเรื่องของภาพยนตร์และฉันต้องการที่จะแทนที่นามสกุลของตัวละครทุกตัวด้วยชื่อของพวกเขา แต่เฉพาะในกรณีที่ชื่อของพวกเขาไม่ได้มาก่อนนามสกุลของพวกเขา ข้อความตัวอย่างอาจมีลักษณะเช่นนี้: John Smith and Jane Johnson talk about Smith's car. ฉันอยากให้มันเป็นแบบนี้: John Smith and Jane Johnson talk about John's car. ถ้าฉันแค่ทำsed 's/Smith/John/' fileแล้วฉันจะมี: John John and Jane Johnson talk about John's car. ชื่อแรกที่มาก่อนนามสกุลจะเหมือนกันเสมอ ฉันไม่ได้มีการจัดการกับและJohn Smith Frank Smithฉันต้องการวิธีการจับคู่Smithที่ไม่ได้นำJohnหน้า

1
ดำเนินการคำสั่ง Nohup พร้อมอินพุต
ใน UNIX ฉันมีกระบวนการที่ฉันต้องการรันโดยใช้ nohup อย่างไรก็ตามกระบวนการนี้ในบางจุดจะรอที่พรอมต์ที่ฉันต้องป้อนyesหรือnoเพื่อดำเนินการต่อ จนถึงตอนนี้ใน UNIX ฉันได้ทำสิ่งต่อไปนี้: nohup myprocess <<EOF y EOF ดังนั้นฉันเริ่มกระบวนการ 'myprocess' โดยใช้ nohup และไปป์ในไฟล์ด้วย 'y' จากนั้นปิดไฟล์ บรรทัดข้างต้นเป็นคำสั่งที่แยกกันสามคำสั่งอย่างมีประสิทธิภาพ - เช่นฉันกด Enter บนบรรทัดแรกใน UNIX จากนั้นฉันจะได้รับพรอมต์เมื่อฉันป้อน 'y' จากนั้นกด Enter เพื่อพิมพ์ 'EOF' ในที่สุดและกดปุ่ม return อีกครั้ง ดังนั้นสิ่งนี้ทำงานได้อย่างสมบูรณ์แบบ แต่ปัญหาของฉันอยู่ด้านล่าง ฉันต้องการที่จะดำเนินการนี้ใน Perl แต่ฉันไม่แน่ใจว่าฉันสามารถรันคำสั่งนี้เพราะมันมีสามบรรทัด ฉันไม่รู้ว่าสิ่งต่อไปนี้จะได้ผลหรือไม่: my $startprocess = `nohup myprocess <<EOF & y EOF …
11 process  perl  nohup 


3
คำสั่ง tr สามารถถูกโยงโซ่เพื่อหลีกเลี่ยงกระบวนการ tr หลายอย่างในไพพ์ไลน์หรือไม่?
ฉันมีไฟล์ txt มากมายฉันต้องการส่งออกตามลำดับที่ต่ำกว่ามีเพียงตัวอักษรและหนึ่งคำต่อบรรทัดฉันสามารถทำได้ด้วยtrคำสั่งต่าง ๆในขั้นตอนนี้: tr -d '[:punct:]' <doyle_sherlock_holmes.txt | tr '[:upper:]' '[:lower:]' | tr ' ' '\n' สามารถทำได้ในการสแกนครั้งเดียวหรือไม่? ฉันสามารถเขียนโปรแกรม C ที่จะทำเช่นนี้ แต่ฉันรู้สึกเหมือนมีวิธีที่จะทำมันได้ใช้tr, sed, หรือawkperl
11 sed  awk  perl  tr 

5
วิธีการแปลงจากรูปแบบวันที่หนึ่งไปเป็นรูปแบบอื่น ๆ ?
ฉันมีปัญหาหนึ่งกับรูปแบบวันที่ของฉัน ฉันต้องการเปลี่ยนจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่งและกลับกัน รูปแบบวันที่ของฉันคือ รูปแบบ 1 YYYY-MM-DD รูปแบบ 2 MM/DD/YYYY ฉันต้องการเปลี่ยนรูปแบบ 1 เป็นรูปแบบ 2 และจัดรูปแบบ 2 เป็นรูปแบบ 1

5
awk / sed / perl one liner + วิธีพิมพ์เฉพาะบรรทัดคุณสมบัติจากไฟล์ json
วิธีพิมพ์เฉพาะคุณสมบัติบรรทัดจากไฟล์ json ตัวอย่างของไฟล์ json { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "items" : [ { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "tag" : "version1527250007610", "type" : "kafka-env", "version" : 8, "Config" : { "cluster_name" : "HDP", "stack_id" : "HDP-2.6" }, "properties" : { "content" : "\n#!/bin/bash\n\n# Set KAFKA specific environment variables here.\n\n# The java implementation to …
10 awk  sed  perl  json  jq 

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.

2
การแก้ไข inplace ของไฟล์ที่ทำนั้นเป็นอย่างไร?
อะไร "inplace" การเปลี่ยนแปลงของไฟล์เช่นผ่านsed -iหรือperl -iหมายถึง? คำถามของฉันเกี่ยวกับการปรับเปลี่ยน inplace นี้แล้ว ไฟล์ถูกคัดลอกการแก้ไขเสร็จสิ้นในการคัดลอกแล้วแทนที่ต้นฉบับหรือไม่? หรือไฟล์ต้นฉบับถูกแก้ไขอย่างใด
10 files  sed  perl 

6
ใช้ Perl เพื่อนับจำนวนของตัวเลขทางวิทยาศาสตร์ในไฟล์
ฉันจะนับจำนวนตัวเลขทางวิทยาศาสตร์ในไฟล์ได้อย่างไร ไฟล์นี้ยังมีส่วนหัวสองสามบรรทัดที่ต้องข้าม ส่วนหนึ่งของเนื้อหาของไฟล์อยู่ด้านล่าง FileHeaderLine1 FileHeaderLine2 FileHeaderLine3 FileHeaderLine4 2.91999996E-001 2.97030300E-001 3.02060604E-001 3.07090908E-001 3.12121212E-001 3.17151517E-001 3.22181821E-001 3.27212125E-001 3.32242429E-001 3.37272733E-001 3.42303038E-001 3.47333342E-001 3.52363646E-001 3.57393950E-001 3.62424254E-001 3.67454559E-001 3.72484863E-001 3.77515137E-001 3.82545441E-001 3.87575746E-001 3.92606050E-001 3.97636354E-001 4.02666658E-001 4.07696962E-001 4.12727267E-001 4.17757571E-001 4.22787875E-001 4.27818179E-001 4.32848483E-001 4.37878788E-001 4.42909092E-001 4.47939396E-001 4.52969700E-001 ดังนั้นฉันจะข้ามสี่บรรทัดแรกของตัวอย่างด้านบนและนับจำนวนตัวเลขทางวิทยาศาสตร์ในไฟล์ได้อย่างไร
10 perl 

2
วิธีที่เป็นมิตรกับทรัพยากรในการระบุถึงโปรแกรมผู้ใช้ไม่ได้หยุดทำงาน
ฉันมีสคริปต์ Perl บนระบบ * ระวังซึ่ง ณ จุดหนึ่งคือการประมวลผลข้อความ 50,000 บรรทัด ใช้เวลาพอสมควร ฉันพยายามค้นหาวิธีที่เป็นมิตรกับทรัพยากรเพื่อให้ผู้ใช้ทราบว่าโปรแกรมไม่ได้หยุดทำงานในขณะที่กำลังประมวลผลข้อความนี้ทั้งหมด ขณะนี้ฉันกำลังพิมพ์เอาต์พุตแบบเรียลไทม์ขณะที่ข้อความกำลังถูกประมวลผล \rฉันกำลังล้างบัฟเฟอร์ส่งออกแล้วพิมพ์การส่งออกในบรรทัดเดียวกับ สิ่งนี้ดูเหมือนจะเป็นการใช้ทรัพยากรที่ไม่จำเป็นเพราะมันใช้เวลานานกว่าเกือบสองเท่าเมื่อฉันไม่พิมพ์อะไรเลย แต่อย่างที่ฉันบอกเมื่อพิมพ์อะไรเลยดูเหมือนว่าโปรแกรมกำลังถูกแขวน ดังนั้นคำถามของฉัน: มีวิธีมาตรฐานหรือวิธีง่าย ๆ เพื่อให้ผู้ใช้ทราบว่าโปรแกรมกำลังทำงานจริง ๆ ในขณะที่ทำงานที่ต้องใช้เวลานานหรือไม่?
10 perl  output 


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

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. …

3
วิธีการแทนที่รหัสหลายบรรทัดด้วย sed
ฉันมีไฟล์ขนาดใหญ่ที่มีอักขระพิเศษอยู่ sedมีรหัสหลายคู่สายจะมีที่ฉันต้องการจะเปลี่ยน นี้: text = "\ ------ ------\n\n\ This message was automatically generated by email software\n\ The delivery of your message has not been affected.\n\n\ ------ ------\n\n" จำเป็นต้องเปลี่ยนเป็น: text = "" ฉันลองใช้รหัสต่อไปนี้ แต่ไม่มีโชค: sed -i '/ text = "*/ {N; s/ text = .*affected.\./ text = ""/g}' /etc/exim.conf มันไม่ได้แทนที่อะไรและไม่แสดงข้อความผิดพลาดใด ๆ …

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