ฉันได้เขียนฟังก์ชันทุบตีเพื่อพิมพ์ส่วนของข้อความที่ล้อมรอบระหว่างการจับคู่บรรทัด ## โหมด: org
และ ## # จุดจบของ org
ในไฟล์โดยมีบรรทัดว่างระหว่างส่วน ก่อนที่ ##
, สามารถมีช่องว่างกี่ช่องก็ได้
นี่คือตัวอย่างไฟล์ที่จะดึงข้อมูลออกมา
ไฟล์: test.sh
## โหมด: org
## * ใช้คำสั่งกรณี
## # จุดจบของ org
กรณี $arg ใน
("วี")
echo "ผู้แต่ง"
;;
(*)
## โหมด: org
## ** โหมดการรายงานข้อผิดพลาดเงียบ (SERM) ใน getopts
## *** ตรวจหาคำเตือนโดยไม่ต้องพิมพ์ข้อความในตัว
## *** เปิดใช้งานโดยโคลอน {:} เป็นอักขระตัวแรกใน shortopts
## # จุดจบของ org
หยุดพัก
;;
เอสแซค
ผลลัพธ์ที่ต้องการจะเป็น
รหัส:
* การใช้คำสั่งกรณี
** โหมดการรายงานข้อผิดพลาดเงียบ (SERM) ใน getopts
*** ตรวจพบคำเตือนโดยไม่ต้องพิมพ์ข้อความในตัว
*** เปิดใช้งานโดยโคลอน {:} เป็นอักขระตัวแรกใน shortopts
นี่คือฟังก์ชั่นที่ฉันใช้
จับภาพองค์กร ()
{
efile ท้องถิ่น = "$1"
โหมด begsec="## ท้องถิ่น: org"
local endec="## # จุดสิ้นสุดขององค์กร"
sed -n "/^[[:space:]]*${begsec}$/,/^[[:space:]]*${endsec}$/s/ *//p'" "$efile" |
sed 's/^'"${begsec}"'$/\n'"${begsec}"'/' |
sed '/^'"${begsec}"'$/d' | sed '/^'"${endsec}"'$/d' | ตัด -c 3-
}
ฉันต้องการทำให้ฟังก์ชันง่ายขึ้นโดยใช้ตัวแปรเพื่อสร้างรูปแบบ แต่ต้องการความช่วยเหลือในการรวบรวมคำสั่งเข้าด้วยกันโดยที่ฉันไม่ต้องเรียก เสด
หลายครั้ง
บางทีอาจจะใช้ อึดอัด
จะเป็นกลยุทธ์ที่ดีกว่า
จับภาพองค์กร ()
{
efile ท้องถิ่น = "$1"
local begsec='^[[:space:]]*## mode: org$'
local endec='^[[:space:]]*## # จุดสิ้นสุดของ org$'
sed -n "/${begsec}/,/${endsec}/s/ *//p" "$efile" |
sed 's/^## # จุดสิ้นสุดของ org$/## # จุดสิ้นสุดของ org\n/' |
sed '/^## โหมด: org$/d' | sed '/^## # จุดสิ้นสุดของ org$/d' | ตัด -c 3-
}