ภารกิจแรกคือการดึงอัตราจากบรรทัดนั้น ด้วย GNU grep (ไม่ฝัง Linux หรือ Cygwin) คุณสามารถใช้-o
ตัวเลือก ส่วนที่คุณต้องการคือชิ้นส่วนที่มีตัวเลขเท่านั้นและตามด้วย%
เครื่องหมาย หากคุณไม่ต้องการที่จะดึง%
ตัวเองคุณจำเป็นต้องมีเคล็ดลับเพิ่มเติมที่: ยืนยัน lookahead ศูนย์ความกว้างซึ่งตรงกับอะไร %
แต่ถ้าอะไรที่จะตามมาด้วย
command1 -p=aaa -v=bbb -i=4 | grep -o -P '[0-9]+(?=%)'
ความเป็นไปได้อีกอย่างคือการใช้ sed เพื่อแยกส่วนของบรรทัดใน sed ใช้s
คำสั่งด้วย regex ที่ตรงกับทั้งบรรทัด (เริ่มต้นด้วย^
และลงท้ายด้วย$
) กับส่วนที่จะเก็บไว้ในกลุ่ม ( \(…\)
) แทนที่ทั้งบรรทัดด้วยเนื้อหาของกลุ่มเพื่อเก็บ โดยทั่วไปให้ส่ง-n
ตัวเลือกเพื่อปิดการพิมพ์เริ่มต้นและวางโมดิp
ฟายเออร์เพื่อพิมพ์บรรทัดที่มีบางสิ่งที่ต้องการแยก (ที่นี่มีบรรทัดเดียวดังนั้นจึงไม่สำคัญ) ดูที่คืนค่าเฉพาะบางส่วนของบรรทัดหลังจากรูปแบบการจับคู่และแยก regex ที่จับคู่กับ 'sed' โดยไม่ต้องพิมพ์อักขระโดยรอบเพื่อเพิ่มเทคนิคพิเศษ
command1 -p=aaa -v=bbb -i=4 | sed 's/^.*rate(\([0-9]*\)%).*$/\1/'
มีความยืดหยุ่นมากขึ้นอีกครั้งกว่า sed, awk Awk ดำเนินการคำแนะนำสำหรับแต่ละบรรทัดด้วยภาษาที่จำเป็นเล็กน้อย มีหลายวิธีในการแยกอัตราที่นี่ ฉันเลือกเขตข้อมูลที่สอง (เขตข้อมูลถูกคั่นด้วยช่องว่างตามค่าเริ่มต้น) และลบอักขระทั้งหมดในนั้นที่ไม่ใช่ตัวเลข
command1 -p=aaa -v=bbb -i=4 | awk '{gsub(/[^0-9]+/, "", $2); print $2}'
command2
ขั้นตอนต่อไปตอนนี้ที่คุณได้สกัดอัตราที่เป็นที่จะผ่านมันเป็นอาร์กิวเมนต์ไปยัง เครื่องมือสำหรับการว่าเป็นsusbtitution คำสั่ง หากคุณวางคำสั่งไว้ภายใน$(…)
(ดอลล่าร์ - วงเล็บ) เอาต์พุตจะถูกแทนที่ลงในบรรทัดคำสั่ง เอาต์พุตของคำสั่งแบ่งออกเป็นคำที่แยกกันในแต่ละบล็อกช่องว่างและแต่ละคำจะถือว่าเป็นรูปแบบสัญลักษณ์แทน "$(…)"
ถ้าคุณต้องการนี้จะเกิดขึ้นใส่คำพูดสองรอบทดแทนคำสั่ง: ด้วยเครื่องหมายคำพูดคู่เอาต์พุตของคำสั่งจะถูกใช้โดยตรงเป็นพารามิเตอร์เดียว (การแปลงเพียงอย่างเดียวคือการขึ้นบรรทัดใหม่ที่ตอนท้ายของเอาต์พุตจะถูกลบออก)
command2 -t "$(command1 -p=aaa -v=bbb -i=4 |
sed 's/^.*rate(\([0-9]*\)%).*$/\1/')"