PowerShell:
แก้ไขไฟล์ในที่เดิมด้วย CLI one-liners

วิธีการ:

การเปลี่ยนข้อความในไฟล์เดียว

เริ่มด้วยงานง่ายๆ: คุณต้องการเปลี่ยน “oldtext” เป็น “newtext” ในไฟล์ที่ชื่อ example.txt นี่คือวิธีทำ:

(Get-Content example.txt) -replace 'oldtext', 'newtext' | Set-Content example.txt

บรรทัดคำสั่งนี้อ่านเนื้อหา ทำการเปลี่ยนและเขียนเนื้อหากลับไปยังไฟล์ต้นฉบับ

การแก้ไขหลายไฟล์

หากคุณต้องการแก้ไขเหมือนกันในหลายไฟล์นั้นอย่างไร? นี่คือวิธีการโดยใช้ลูป:

Get-ChildItem *.txt | ForEach-Object {
  (Get-Content $_) -replace 'oldtext', 'newtext' | Set-Content $_
}

ตัวอย่างนี้หาไฟล์ .txt ทั้งหมดในโฟลเดอร์ปัจจุบัน และเปลี่ยน “oldtext” เป็น “newtext” ในแต่ละไฟล์

เพิ่มเนื้อหาที่จุดเริ่มต้นหรือสิ้นสุดของไฟล์

การเพิ่มหรือแทรกเนื้อหาที่จุดเริ่มต้นหรือสิ้นสุดของไฟล์ก็สามารถทำได้ง่ายขึ้น:

# การแทรกที่จุดเริ่มต้น
"New first line`n" + (Get-Content example.txt) | Set-Content example.txt

# การเพิ่มที่จุดสิ้นสุด
(Get-Content example.txt) + "`nNew last line" | Set-Content example.txt

ที่นี่ เราเพียงต่อเนื้อหาใหม่ก่อนหรือหลังเนื้อหาเดิมแล้วบันทึกกลับเข้าไป

ศึกษาเพิ่มเติม

ในอดีต การแก้ไขที่จุดนั้นๆ มักถูกเชื่อมโยงกับเครื่องมือ Unix เช่น sed และ awk PowerShell ที่เป็นผู้เข้ามาใหม่ เมื่อเทียบกับเครื่องมือเหล่านี้ไม่มีคุณสมบัติการแก้ไขที่จุดโดยตรงในตัวเอง เนื่องจากปรัชญาการออกแบบของมันที่เน้นความสำคัญของออบเจกต์เหนือการสตรีมข้อมูลประเภทข้อความ ไม่เหมือนกับเครื่องมือ Unix ที่รับข้อมูลส่วนใหญ่เป็นข้อความ

ทางเลือกสำหรับการใช้ PowerShell ในงานนี้รวมถึงการใช้เครื่องมือ Unix แบบดั้งเดิมที่มีให้บริการบน Windows ผ่าน Cygwin หรือ Windows Subsystem for Linux (WSL) เครื่องมือเหล่านี้มักให้ไวยากรณ์ที่กระชับมากขึ้นสำหรับการแก้ไขที่จุดเนื่องจากการออกแบบที่เน้นข้อความ

ในแง่ของการติดตั้ง สำคัญที่จะต้องบันทึกไว้ว่า วิธีของ PowerShell ประกอบด้วยการอ่านไฟล์ทั้งหมดเข้าสู่หน่วยความจำ ทำการเปลี่ยนแปลง จากนั้นเขียนกลับไป ในขณะที่วิธีนี้ทำงานได้ดีสำหรับไฟล์ขนาดปานกลาง มันอาจไม่มีประสิทธิภาพสำหรับไฟล์ขนาดใหญ่มาก ในกรณีเช่นนี้ อาจพิจารณาใช้เมทอดของ .NET โดยตรง หรือหันไปใช้เครื่องมืออื่นที่ออกแบบมาสำหรับการสตรีมข้อมูลขนาดใหญ่

แม้จะมีข้อพิจารณาเหล่านี้ ความยืดหยุ่นและคุณลักษณะที่มากมายของ PowerShell ทำให้มันเป็นเครื่องมือที่มีค่าไม่มากก็น้อยในการจัดการไฟล์โดยตรงจากบรรทัดคำสั่ง โดยเฉพาะอย่างยิ่งสำหรับผู้ที่มีฐานอยู่ในระบบ Windows หรือจัดการสภาพแวดล้อมที่เป็นข้ามแพลตฟอร์ม