วิธีการลบซับสตริงในสคริปต์ Powershell


2

สคริปต์นี้เป็นสิ่งที่ฉันต้องการ:

$input_path = 'C:\Common'
$output_file = 'C:\Common\extracted.txt'
$regex = 'assets'

Get-ChildItem -Path $input_path -Filter *.txt 
| Select-String -Pattern $regex -AllMatches  
| Out-File $output_file -Force

ปัญหาที่ฉันมีคือเมื่อฉันเปลี่ยน $ inputpath เป็นพูด 'C: \ Common \ Data' ไฟล์เอาต์พุตเพิ่ม Data \ ไปยังจุดเริ่มต้นของบรรทัด ใครสามารถบอกฉันว่าไม่มีชื่อโฟลเดอร์สุดท้ายในผลลัพธ์ได้อย่างไร

คำตอบ:


0
ls -Fo $input_path -Fi *.txt|Select-String -Patt $regex -All|%{$f=$_.path -split '\\';$f[-2]+'\;'+$_.filename+';'+$_.linenumber+';'+$_.line}|Out-File $output_file -Fo -width 400 -OutB 0x7FFFFFFF -EA 0
  • -OutB 0x7FFFFFFF - ไฟล์จัดสรรขนาดบัฟเฟอร์ - เร่งความเร็วในการสร้างและเติมไฟล์
  • -width 400 - ความกว้างบรรทัดที่ไฟล์ขนาดเริ่มต้น 80
  • -EA 0 = ErrorAction - ข้ามข้อผิดพลาดทั้งหมด

  • $f=$_.path -split '\\' - แยกพา ธ ไฟล์แบบเต็มตัวคั่น \ และบันทึกชิ้นส่วนลงในอาร์เรย์ $f

  • $f[-2] - ส่งคืนองค์ประกอบที่ 2 ที่ท้ายอาร์เรย์ $ f (ไดเรกทอรีไฟล์ในตัวอย่างนี้ - Data directory)
  • $_.filename - ชื่อไฟล์
  • $_.linenumber - หมายเลขบรรทัดที่รูปแบบการค้นหา (ตัวแปร $ regex)
  • $_.line - ข้อความที่หมายเลขบรรทัด

  • ls -Fo $input_path -Fi *.txt & lt; = & gt; Get-ChildItem -Path $input_path -Filter *.txt

  • Select-String -Patt $regex -All & lt; = & gt; Select-String -Pattern $regex -AllMatches
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.