หากคุณต้องการตรวจสอบว่าพบการแข่งขันหรือไม่ให้ตัดบรรทัดอินพุตทั้งหมดตามความยาวของคำนำหน้า ( $1
) จากนั้นใช้ grep รูปแบบคงที่:
if cut -c 1-"${#1}" | grep -qF "$1"; then
echo "found"
else
echo "not found"
fi
นอกจากนี้ยังง่ายต่อการนับจำนวนเส้นที่ตรงกัน:
cut -c 1-"${#1}" | grep -cF "$1"
หรือหมายเลขบรรทัดของการจับคู่ทั้งหมด (หมายเลขบรรทัดเริ่มต้นที่ 1):
cut -c 1-"${#1}" | grep -nF "$1" | cut -d : -f 1
คุณสามารถป้อนหมายเลขบรรทัดhead
และtail
เพื่อรับข้อความเต็มของบรรทัดที่ตรงกัน แต่ ณ จุดนั้นมันง่ายกว่าที่จะเข้าถึงภาษาสคริปต์ที่ทันสมัยเช่น Python หรือ Ruby
(ตัวอย่างข้างต้นสมมติว่ามี grep และตัดของ Posix พวกเขาถือว่าไฟล์ที่ค้นหามาจากอินพุตมาตรฐาน แต่สามารถปรับให้ใช้ชื่อไฟล์แทนได้อย่างง่ายดาย)
แก้ไข: คุณควรตรวจสอบให้แน่ใจว่ารูปแบบ ( $1
) ไม่ใช่สตริงที่มีความยาวเป็นศูนย์ มิฉะนั้นล้มเหลวบอกว่าcut
values may not include zero
นอกจากนี้ถ้าใช้ทุบตีใช้เพื่อจับข้อผิดพลาดออกโดยset -o pipefail
cut
grep '^$1'
หรือไม่? หรือคุณไม่ได้หมายความว่าคุณต้องการป้องกัน$1
การขยายตัวของเชลล์?