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 หรือจัดการสภาพแวดล้อมที่เป็นข้ามแพลตฟอร์ม