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

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

8
ฉันจะแทนที่สตริงในไฟล์ได้อย่างไร?
การแทนที่สตริงในไฟล์ตามเกณฑ์การค้นหาบางอย่างเป็นงานที่พบบ่อยมาก ฉันสามารถ แทนที่สตริงfooด้วยbarในไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันหรือไม่ ทำแบบเดียวกันซ้ำสำหรับไดเรกทอรีย่อย? แทนที่เฉพาะถ้าชื่อไฟล์ตรงกับสายอื่น? แทนที่เฉพาะในกรณีที่พบสตริงในบริบท? แทนที่หากสตริงอยู่ในหมายเลขบรรทัดที่แน่นอน? แทนที่สตริงจำนวนมากด้วยการแทนที่เดียวกัน แทนที่หลายสตริงด้วยการแทนที่ที่แตกต่างกัน
752 text-processing  awk  sed  perl 

3
$ {1 +“ $ @”} หมายถึงอะไรในเชลล์สคริปต์และมันแตกต่างจาก“ $ @” อย่างไร
ในเอกสารประกอบ Perl, perlrun (1)แนะนำการเรียกใช้สคริปต์ Perl โดยใช้ส่วนหัวของสองภาษาเชลล์ / Perl: #!/bin/sh #! -*-perl-*- eval 'exec perl -x -wS $0 ${1+"$@"}' if 0; อะไร${1+"$@"}หมายถึง? ฉันลองใช้"$@"แทน (โดยใช้ Bash เป็น / bin / sh) และดูเหมือนว่าจะใช้งานได้เช่นกัน แก้ไข ${1:+"$@"}สองคำตอบด้านล่างบอกว่ามันควรจะเป็น ฉันรับรู้ถึง${parameter:+word}ไวยากรณ์ ("ใช้ค่าทางเลือก") ที่ระบุไว้ใน bash (1) อย่างไรก็ตามฉันไม่มั่นใจเพราะ ทั้งสองอย่าง${1+"$@"}และใช้"$@"งานได้ดีแม้ว่าจะไม่มีพารามิเตอร์ก็ตาม ถ้าฉันสร้าง simple.sh เป็น #!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 …
43 bash  shell  perl 

6
คุณจะแสดงรายการจำนวนบรรทัดของทุกไฟล์ในไดเรกทอรีในรูปแบบที่มนุษย์อ่านได้อย่างไร
ฉันมีรายการไดเรกทอรีและไดเรกทอรีย่อยที่มีไฟล์ csv ขนาดใหญ่ ไฟล์เหล่านี้มีประมาณ 500 ล้านบรรทัดโดยแต่ละรายการจะมีการบันทึก ผมอยากจะรู้ว่า มีกี่บรรทัดในแต่ละไฟล์ มีกี่บรรทัดในไดเรกทอรี จำนวนบรรทัดทั้งหมด ที่สำคัญที่สุดฉันต้องการสิ่งนี้ใน 'รูปแบบที่มนุษย์อ่านได้' เช่น 12,345,678 มากกว่า 12345678 มันจะเป็นการดีถ้าได้เรียนรู้วิธีการทำ 3 วิธี เครื่องมือทุบตีวานิลลาธรรมดา awk ฯลฯ และ Perl (หรือหลาม)
40 bash  awk  python  perl 

7
Linux เทียบเท่ากับการควบคุมระยะไกลแบบหนึ่งต่อหลายของ PowerShell
มาจากการดูแลของ Windows ฉันต้องการขุดลึกลงไปใน Linux (Debian) หนึ่งในคำถามที่กำลังลุกไหม้ของฉันที่ฉันไม่สามารถหาคำตอบในการค้นหาเว็บ (ไม่พบมัน) คือ: ฉันจะบรรลุการ remoting "หนึ่งต่อหลาย" ที่เรียกว่าเช่นใน PowerShell สำหรับ Windows ได้อย่างไร หากต้องการทำลายข้อมูลพื้นฐานฉันจะพูดว่า: มุมมองของฉันบน Linux: ฉันสามารถ ssh ลงในเซิร์ฟเวอร์และพิมพ์คำสั่งของฉัน ฉันได้รับผลลัพธ์ สำหรับสภาพแวดล้อมของเซิร์ฟเวอร์ 10 แห่งฉันจะต้องเขียนสคริปต์ (perl / python?) เพื่อส่งคำสั่งสำหรับแต่ละเซิร์ฟเวอร์หรือไม่ ประสบการณ์ของฉันจาก Windows: ฉันพิมพ์คำสั่งของฉันและด้วยคำสั่ง "เรียกใช้คำสั่ง" ฉันสามารถ "ส่ง" สิ่งนี้ไปยังเซิร์ฟเวอร์จำนวนมาก (อาจมาจากไฟล์ข้อความ) เพื่อดำเนินการพร้อมกันและรับผลลัพธ์กลับมา (เป็นวัตถุสำหรับการทำงานต่อไป) ฉันยังสามารถสร้างหลายเซสชันการเชื่อมต่อถูกเก็บไว้ในพื้นหลังและเลือกส่งคำสั่งไปยังเซสชันเหล่านี้และรีโมทเข้าและออกอย่างที่ฉันต้องการ (ฉันเคยได้ยินพ่อครัวหุ่นเชิดและอื่น ๆ นี่เป็นอย่างนั้นเหรอ?) Update 2019: หลังจากลองมาก - ฉันแนะนำRex (ดูความคิดเห็นด้านล่างนี้ …

9
คุณจะรวมบรรทัดทั้งหมดที่ลงท้ายด้วยอักขระเครื่องหมายทับขวาได้อย่างไร
การใช้เครื่องมือบรรทัดคำสั่งทั่วไปเช่น sed หรือ awk เป็นไปได้หรือไม่ที่จะรวมบรรทัดทั้งหมดที่ลงท้ายด้วยอักขระที่กำหนดเช่นแบ็กสแลช? ตัวอย่างเช่นให้ไฟล์: foo bar \ bash \ baz dude \ happy ฉันต้องการเอาท์พุทนี้: foo bar bash baz dude happy

10
วิธีแทรกเนื้อหาของไฟล์ลงในไฟล์อื่นก่อนรูปแบบ (เครื่องหมาย)?
File1 เนื้อหา: line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" File2 เนื้อหา: line1-file2 "25" line2-file2 "24" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" หลังจากการดำเนินการของ perl / shell script File2เนื้อหาควรเป็น: line1-file2 "25" line2-file2 "24" line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" เช่นวางเนื้อหาFile1ในFile2ก่อนบรรทัดที่มี "ตัวชี้"

4
วิธีการ“ grep” สำหรับความยาวบรรทัดในช่วงที่กำหนด?
หมายเหตุ:คำถามนี้เป็นส่วนเติมเต็มของคำถาม & คำตอบ: วิธีการ "grep" สำหรับความยาวบรรทัด * ไม่ใช่ * ในช่วงที่กำหนด? ฉันต้องได้รับเพียงบรรทัดจาก textfile (wordlist, คั่นด้วยขึ้นบรรทัดใหม่) ที่มีช่วงความยาวต่ำสุดหรือเท่ากับ 3 อักขระ แต่ไม่เกินหรือเท่ากับ 10 ตัวอย่าง: INPUT: egyezményét megkíván ki alma kevesen meghatározó เอาท์พุท: megkíván alma kevesen คำถาม:ฉันจะทำสิ่งนี้ได้bashอย่างไร
28 bash  sed  grep  perl 

13
แปลง CSV เป็น TSV
ฉันมีไฟล์ CSV จำนวนมากและต้องการให้เป็น TSV (รูปแบบที่คั่นด้วยแท็บ) ภาวะแทรกซ้อนคือมีเครื่องหมายจุลภาคในฟิลด์ของไฟล์ CSV เช่น: A,,C,"D,E,F","G",I,"K,L,M",Z ผลลัพธ์ที่คาดหวัง: A C D,E,F G I K,L,M Z (ที่ช่องว่างในระหว่างนั้นเป็นแท็บ 'ยาก') ฉันมี Perl, Python และ coreutils ติดตั้งอยู่บนเซิร์ฟเวอร์นี้

2
ผลกระทบด้านความปลอดภัยของการเรียกใช้ Perl - '' …
เห็นได้ชัดว่ากำลังทำงาน: perl -n -e 'some perl code' * หรือ find . ... -exec perl -n -e '...' {} + (เช่นเดียวกับ-pแทน-n) หรือ perl -e 'some code using <>' * มักจะพบในหนึ่ง liners โพสต์บนเว็บไซต์นี้มีผลกระทบด้านความปลอดภัย ตกลงคืออะไร? จะหลีกเลี่ยงได้อย่างไร


1
ที่สัญญาณหลังจาก shebang?
ในสคริปต์ "support / apxs.in" ของ Apache httpdข้อความที่ล้อมรอบด้วย@เครื่องหมายจะปรากฏขึ้นหลังจาก#!นั้น นั่นคือบรรทัดแรกของสคริปต์คือ: #!@perlbin@ -w นี่คือสิ่ง Perl หรือสิ่งเคอร์เนล UNIX? กล่าวอีกนัยหนึ่งเป็นไปได้ไหมที่จะเรียกใช้สคริปต์นี้โดยใช้path/to/script/script_name.in? ถ้าไม่เช่นนั้นมีเหตุผลอะไรที่จะเริ่มสคริปต์ด้วย#!?

8
วิธีลบคอลัมน์สุดท้ายของไฟล์ใน Linux
ฉันต้องการลบคอลัมน์สุดท้ายของไฟล์ txt ในขณะที่ฉันไม่ทราบว่าหมายเลขคอลัมน์คืออะไร ฉันจะทำสิ่งนี้ได้อย่างไร ตัวอย่าง: การป้อนข้อมูล: 1223 1234 1323 ... 2222 123 1233 1234 1233 ... 3444 125 0000 5553 3455 ... 2334 222 และฉันต้องการให้ผลลัพธ์ของฉันเป็น: 1223 1234 1323 ... 2222 1233 1234 1233 ... 3444 0000 5553 3455 ... 2334

5
จะ grep สำหรับข้อความในไฟล์และแสดงย่อหน้าที่มีข้อความได้อย่างไร
ด้านล่างนี้เป็นข้อความในไฟล์: Pseudo name=Apple Code=42B state=fault Pseudo name=Prance Code=43B state=good ฉันต้องการ grep สำหรับ "42B" และรับผลลัพธ์จากข้อความข้างต้นเช่น: Pseudo name=Apple Code=42B state=fault ใครบ้างมีความคิดเกี่ยวกับวิธีการบรรลุการใช้grep/ awk/ sed?

1
มีอะไรกับการเปลี่ยนชื่อทั้งหมด: prename เปลี่ยนชื่อเปลี่ยนชื่อไฟล์?
ในระบบ Debian ของฉัน (ก็คือระบบ LMDE ของฉัน แต่ใกล้พอ) ฉันมีrenameโปรแกรมที่แตกต่างกันอย่างน้อย 3 โปรแกรม: /usr/local/bin/rename: นี่คือสคริปต์ Perl ที่เขียนโดย Tom Christiansen ผิดปกติฉันไม่สามารถหาแพ็คเกจที่ติดตั้งได้: $ dpkg -S /usr/local/bin/rename dpkg-query: no path found matching pattern /usr/local/bin/rename /usr/bin/prename: สคริปต์ perl อื่นที่เขียนโดย Robin Barker อันนี้เป็นส่วนหนึ่งของperlแพ็คเกจ: $ dpkg -S /usr/bin/prename perl: /usr/bin/prename /usr/bin/file-rename: ยังเป็นสคริปต์ Perl อื่นไม่มีข้อมูลการเขียนที่ชัดเจน แต่ทั้ง Larry (สันนิษฐาน Wall) และ …
24 debian  perl  rename 

1
รูปแบบทดแทนภายในไฟล์ที่มีเนื้อหาของไฟล์อื่น
ฉันมีไฟล์ข้อความ ( devel.xml) ฉันเพิ่มคำ REPLACETHIS ลงไปเพื่อแทนที่สตริงนี้ด้วยเนื้อหาภายในไฟล์อื่น ( temp.txt) สิ่งที่ฉันมีอยู่ใกล้ที่สุดคือ: sed -i -e "/REPLACETHIS/r temp.TXT" -e "s///" devel.txt; สิ่งนี้แทรกเนื้อหาหลังสตริงและจากนั้นลบสตริงในภายหลัง นี่เป็นวิธีที่ดีที่สุดที่จะทำ?

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