ค้นหาเว็บไซต์

วิธีแทนที่ตัวยึดตำแหน่งในสตริงโดยใช้ PowerShell


เมื่อเร็วๆ นี้ฉันกำลังทำงานกับสคริปต์ PowerShell ซึ่งฉันใช้วิธีการต่างๆ เพื่อแทนที่ตัวยึดตำแหน่งในสตริง ฉันคิดว่าฉันจะแบ่งปันกับคุณ ในบทช่วยสอนนี้ ฉันจะแสดงวิธีแทนที่ตัวยึดตำแหน่งในสตริงโดยใช้ PowerShell

หากต้องการแทนที่ตัวยึดตำแหน่งในสตริงโดยใช้ PowerShell คุณสามารถใช้ตัวดำเนินการ -replace ซึ่งใช้นิพจน์ทั่วไป ตัวอย่างเช่น เมื่อกำหนดสตริงเทมเพลต “เมืองหลวงของ {State} คือ {Capital}” คุณสามารถแทนที่ {State} ด้วย “California” และ {Capital} ด้วย “Sacramento” โดยใช้คำสั่งต่อไปนี้: $template=$template - แทนที่ “{State}”, “California” และ $template=$template -แทนที่ “{Capital}”, “Sacramento” ซึ่งจะเปลี่ยนเทมเพลตเป็น “เมืองหลวงของแคลิฟอร์เนียคือเมืองแซคราเมนโต”

1. การใช้ตัวดำเนินการ -replace

ตัวดำเนินการ -replace ใน PowerShell มีประโยชน์มากสำหรับการแทนที่ข้อความภายในสตริง ใช้นิพจน์ทั่วไปเพื่อระบุข้อความที่จะแทนที่ ทำให้มีความยืดหยุ่นมาก

ฉันขอแสดงตัวอย่างให้คุณดู

สมมติว่าเรามีสตริงเทมเพลตสำหรับรายงานที่มีตัวยึดตำแหน่งสำหรับชื่อรัฐและตัวพิมพ์ใหญ่ คุณสามารถเขียนสคริปต์ PowerShell ได้ดังนี้

$template = "The capital of {State} is {Capital}."

เราต้องการแทนที่ {State} ด้วย “California” และ {Capital} ด้วย “Sacramento”:

$template = "The capital of {State} is {Capital}."
$template = $template -replace "\{State\}", "California"
$template = $template -replace "\{Capital\}", "Sacramento"
$template

หลังจากรันคำสั่งข้างต้นแล้ว สตริง $template จะเป็น:

"The capital of California is Sacramento."

ฉันรันสคริปต์ PowerShell ด้านบนโดยใช้โค้ด VS และคุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่าง:

อ่านแปลงสตริงเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ใน PowerShell

2. การใช้เมธอด .Replace()

วิธีการ .Replace() เป็นอีกวิธีหนึ่งในการแทนที่ข้อความในสตริงใน PowerShell เป็นส่วนหนึ่งของคลาส .NET String และไม่ได้ใช้นิพจน์ทั่วไป

ฉันจะแสดงตัวอย่างวิธีใช้เมธอด .replace() เพื่อแทนที่ตัวยึดตำแหน่งใน Strings ใน PowerShell

พิจารณาเทมเพลตคำทักทายสำหรับอีเมลฝ่ายบริการลูกค้า:

$emailTemplate = "Dear {FirstName}, thank you for visiting our store in {City}."

หากต้องการปรับแต่งเทมเพลตนี้สำหรับลูกค้าชื่อ John ที่มาเยี่ยมชมร้านค้าในนิวยอร์ก:

$emailTemplate = "Dear {FirstName}, thank you for visiting our store in {City}."
$emailTemplate = $emailTemplate.Replace("{FirstName}", "John")
$emailTemplate = $emailTemplate.Replace("{City}", "New York")
$emailTemplate

สตริงผลลัพธ์จะเป็น:

"Dear John, thank you for visiting our store in New York."

คุณสามารถตรวจสอบผลลัพธ์ได้ในภาพหน้าจอด้านล่างหลังจากที่ฉันรันสคริปต์ PowerShell ด้านบน

ตรวจสอบการนับจำนวนอักขระในสตริงใน PowerShell

3. การใช้ -f (ตัวดำเนินการฟอร์แมต)

ตัวดำเนินการรูปแบบ -f ใน PowerShell เป็นอีกวิธีที่มีประโยชน์สำหรับการทดแทนสตริง ช่วยให้คุณสามารถแทรกค่าลงในสตริงที่ตัวยึดตำแหน่งที่ระบุ

นี่คือตัวอย่าง สมมติว่าเราจำเป็นต้องสร้างรายงานการขายสำหรับไตรมาสที่เฉพาะเจาะจง จากนั้นคุณสามารถเขียนสคริปต์ด้านล่าง

$reportTemplate = "In Q{0}, the total sales in {1} were ${2} million."
$quarter = 2
$state = "Texas"
$sales = 5.4
$report = $reportTemplate -f $quarter, $state, $sales
$report

สตริงผลลัพธ์จะเป็น:

"In Q2, the total sales in Texas were $5.4 million."

ฉันรันสคริปต์ PowerShell ข้างต้นโดยใช้รหัส VS คุณสามารถดูผลลัพธ์ได้ในภาพหน้าจอด้านล่าง

อ่านตรวจสอบว่าสตริงมีหลายค่าใน PowerShell หรือไม่

4. การใช้ฟังก์ชันแบบกำหนดเอง

คุณยังสามารถเขียนฟังก์ชันแบบกำหนดเองใน PowerShell เพื่อจัดการการแทนที่หลายรายการพร้อมกันได้

ฉันขอแสดงวิธีการทำ

มาสร้างฟังก์ชั่นที่ใช้เทมเพลตและแฮชเทเบิลของการแทนที่กัน:

function Replace-Placeholders {
    param (
        [string]$template,
        [hashtable]$replacements
    )
    foreach ($key in $replacements.Keys) {
        $template = $template.Replace("{$key}", $replacements[$key])
    }
    return $template
}

$template = "The governor of {State} is {Governor}."
$replacements = @{
    State = "Florida"
    Governor = "Ron DeSantis"
}
$result = Replace-Placeholders -template $template -replacements $replacements

สตริงผลลัพธ์จะเป็น:

"The governor of Florida is Ron DeSantis."

บทสรุป

หากคุณทำงานเป็นนักพัฒนา PowerShell คุณจะได้รับข้อกำหนดนี้บ่อยมาก ในบทช่วยสอนนี้ ฉันได้อธิบายวิธีแทนที่ตัวยึดตำแหน่งในสตริงใน PowerShell โดยใช้วิธีต่างๆ ฉันจะแนะนำให้ใช้ตัวดำเนินการ -replace ซึ่งเป็นเมธอด .Replace() สำหรับสิ่งนี้เสมอ

ฉันหวังว่าตัวอย่างข้างต้นทั้งหมดจะช่วยให้คุณเรียนรู้สิ่งนี้ได้อย่างสมบูรณ์

บทความที่เกี่ยวข้อง