debian: บันทึกการใช้งาน sed

 

บันทึกการค้นหาและแทนที่ไฟล์ในไดเรคทอรี่ ด้วยคำสั่ง sed
จะค้นหาคำว่า old และแทนที่ด้วยคำว่า new ทุกไฟล์ในไดเรคทอรี่ นำไฟล์ใหม่ไปเก็บใน ./temp
# mkdir temp
# for i in *; do
  if [ -f $i ]; then
    sed -e 's/old/new/g' $i > temp/$i
  fi
done

เพิ่มเติม
ทำเป็นคำสั่งสำเร็จรูป
# OLD=old
# NEW=new
# mkdir temp
# for i in *; do
  if [ -f $i ]; then
    sed -e "s/$OLD/$NEW/g" $i > temp/$i
  fi
done

เพิ่มเติม 2
จากตัวอย่างข้างต้น อาจใช้ sed ได้ดังนี้
# sed -i "s/old/new/g" file.txt

สำหรับอักขระพิเศษ เช่น / สามารถแทนด้วย \\/
เช่น แทนที่ /usr/bin เป็น /usr/local/bin
# sed -i "s/\\/usr\\/bin/\\/usr\\/local\\/bin/g" file.txt

หรืออาจใช้ตัวคั่นเป็น @ แทน จากตัวอย่างจะกลายเป็น
# sed -i "s@/usr/bin@/usr/local/bin@g" file.txt

สำหรับอักขระพิเศษคือ New-line แทนด้วย \n
ยังหาวิธีใช้ค้นไม่ได้ แต่สามารถใช้ในการแทนที่ได้ เช่น
# sed -i "s/old\nline/new\nline/g" file.txt แบบนี้ใช้ไม่ได้

แต่แบบนี้
# sed -i "s/line one/line one\nline two/g" file.txt แบบนี้ใช้ได้

อ้างอิง