วิธีแทนที่สตริงในไฟล์ใน Bash

How Replace String File Bash



ในฐานะโปรแกรมเมอร์ คุณอาจต้องทำงานกับไฟล์ประเภทต่างๆ เพื่อจัดเก็บข้อมูลชั่วคราวหรือถาวร บางครั้ง คุณอาจต้องแทนที่บางส่วนของไฟล์หรือแก้ไขเนื้อหาเฉพาะของไฟล์ ในการแทนที่เนื้อหาในไฟล์ คุณต้องค้นหาสตริงของไฟล์นั้น ๆ NS แต่ คำสั่งใช้เพื่อแทนที่สตริงใด ๆ ในไฟล์โดยใช้สคริปต์ทุบตี คำสั่งนี้สามารถใช้ได้หลายวิธีเพื่อแทนที่เนื้อหาของไฟล์ในทุบตี NS 'อ๊าก ' คำสั่งยังสามารถใช้เพื่อแทนที่สตริงในไฟล์ บทช่วยสอนนี้จะแสดงวิธีแทนที่ค่าสตริงจากไฟล์โดยใช้สคริปต์ทุบตี ไฟล์ข้อความชื่อ Sales.txt ด้วยเนื้อหาต่อไปนี้ถูกสร้างขึ้นเพื่อแสดงการดำเนินการเปลี่ยน

Sales.txt







วันที่ จำนวน พื้นที่

01/01/2020 60000 ธากา
10/02/2020 76000 Rajshahi
21/03/2020 54000 กุลนา
15/04/2020 78000 จันทปุระ
17/05/2020 45000 โบกรา
02/06/2020 67000 คูมิลลา

แทนที่สตริงในไฟล์ด้วยคำสั่ง `sed'

ไวยากรณ์พื้นฐานของ ` sed ` คำสั่งสำหรับแทนที่สตริงเฉพาะในไฟล์ได้รับด้านล่าง



ไวยากรณ์



sed -ผม 's/search_string/replace_string/'ชื่อไฟล์

ทุกส่วนของไวยากรณ์ข้างต้นได้อธิบายไว้ด้านล่าง





'-ผม' ตัวเลือกใช้เพื่อแก้ไขเนื้อหาของไฟล์ต้นฉบับด้วยสตริงการแทนที่ หากมีสตริงการค้นหาอยู่ในไฟล์

'NS' ระบุคำสั่งทดแทน



'ค้นหา_สตริง' มีค่าสตริงที่จะค้นหาในไฟล์เพื่อแทนที่

'replace_string' มีค่าสตริงที่จะใช้แทนที่เนื้อหาของไฟล์ที่ตรงกับ 'ค้นหา_สตริง' ค่า.

'ชื่อไฟล์' มีชื่อไฟล์ที่จะใช้การค้นหาและแทนที่

ตัวอย่างที่ 1: แทนที่ไฟล์ด้วยคำสั่ง 'sed'

ในสคริปต์ต่อไปนี้ ข้อความค้นหาและแทนที่จะถูกนำมาจากผู้ใช้ หากสตริงการค้นหามีอยู่ใน 'Sales.txt' สตริงนั้นจะถูกแทนที่ด้วยสตริงการแทนที่ ที่นี่ จะทำการค้นหาโดยคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

#!/bin/bash

# กำหนดชื่อไฟล์
ชื่อไฟล์='Sales.txt'

# ใช้สตริงการค้นหา
อ่าน -NS 'ป้อนสตริงการค้นหา: 'ค้นหา

#รับสายแทน
อ่าน -NS 'ป้อนสตริงแทนที่:'แทนที่

ถ้า [[ $search !='' && $replace !='' ]];แล้ว
sed -ผม 'NS/$search/$replace/ ' $ชื่อไฟล์
เป็น

เอาท์พุต

ตัวอย่างที่ 2: แทนที่ไฟล์ด้วยคำสั่ง 'sed' ด้วย 'g' และ 'i' Flag

สคริปต์ต่อไปนี้จะทำงานเหมือนตัวอย่างก่อนหน้านี้ แต่สตริงการค้นหาจะถูกค้นหาทั่วโลกสำหรับแฟล็ก 'g' และการค้นหาที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่จะเสร็จสิ้นสำหรับแฟล็ก 'i'

#!/bin/bash

# ใช้สตริงการค้นหา
อ่าน -NS 'ป้อนสตริงการค้นหา: 'ค้นหา

#รับสายแทน
อ่าน -NS 'ป้อนสตริงแทนที่:'แทนที่

ถ้า [[ $search !='' && $replace !='' ]];แล้ว
sed -ผม 'NS/$search/$replace/ให้' $ 1
เป็น

เอาท์พุต

ตัวอย่างที่ 3: แทนที่ไฟล์ด้วยคำสั่ง 'sed' และรูปแบบตัวเลขที่ตรงกัน

สคริปต์ต่อไปนี้จะค้นหาเนื้อหาที่เป็นตัวเลขทั้งหมดในไฟล์ และจะแทนที่เนื้อหาด้วยการเพิ่ม '$' สัญลักษณ์ที่จุดเริ่มต้นของตัวเลข

#!/bin/bash

# ตรวจสอบค่าอาร์กิวเมนต์บรรทัดคำสั่งว่ามีอยู่หรือไม่
ถ้า [ $ 1 !='' ];แล้ว
# ค้นหาสตริงทั้งหมดที่มีตัวเลขและเพิ่ม $
sed -ผม 's/[0-9]{5}/$&/g' $ 1
เป็น

เอาท์พุต

แทนที่สตริงในไฟล์ด้วย `awk` Command

NS ' อ๊าก ' คำสั่งเป็นอีกวิธีหนึ่งในการแทนที่สตริงในไฟล์ แต่คำสั่งนี้ไม่สามารถอัปเดตไฟล์ต้นฉบับได้โดยตรงเช่น ' แต่ สั่งการ.

ตัวอย่างที่ 4: แทนที่ไฟล์ด้วยคำสั่ง 'awk'

สคริปต์ต่อไปนี้จะจัดเก็บเนื้อหาที่อัปเดตใน temp.txt ไฟล์ที่จะเปลี่ยนชื่อเป็นไฟล์ต้นฉบับ

#!/bin/bash

# ตรวจสอบค่าอาร์กิวเมนต์บรรทัดคำสั่งว่ามีอยู่หรือไม่
ถ้า [ $ 1 !='' ];แล้ว
# ค้นหาสตริงทั้งหมดตามวันที่
awk '{sub('02/06/2020','12/06/2020')}1' $ 1 >temp.txt&& mvtemp.txt$ 1
เป็น

เอาท์พุต

บทสรุป

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