กลับมาทบทวนอีกครั้งและพยายามที่จะไม่ใช้อะไรเลยนอกจาก Bash shell อีกโซลูชันหนึ่งบรรทัดคือ:
while read url; do url="${url##*/}" && echo "${url%%\'*}"; done < file.in > file.out
โดยที่ file.in มีรายการ url 'สกปรก' และ file.out จะมีรายการ URL 'clean' ไม่มีการพึ่งพาภายนอกและไม่จำเป็นต้องวางไข่กระบวนการหรือ subshells ใหม่ คำอธิบายดั้งเดิมและสคริปต์ที่ยืดหยุ่นมากขึ้นจะตามมา มีสรุปวิธีการที่ดีที่นี่ดูตัวอย่างที่ 10-10 นี่คือการทดแทนพารามิเตอร์ตามรูปแบบใน Bash
ขยายความคิด:
src="define('URL', 'http://url.com');"
src="${src##*/}" # remove the longest string before and including /
echo "${src%%\'*}" # remove the longest string after and including '
ผลลัพธ์:
url.com
ไม่จำเป็นต้องเรียกโปรแกรมภายนอกใด ๆ นอกจากนี้สคริปต์ทุบตีต่อไปนี้get_urls.sh
อนุญาตให้คุณอ่านไฟล์โดยตรงหรือจาก stdin:
#!/usr/bin/env bash
# usage:
# ./get_urls.sh 'file.in'
# grep 'URL' 'file.in' | ./get_urls.sh
# assumptions:
# there is not more than one url per line of text.
# the url of interest is a simple one.
# begin get_urls.sh
# get_url 'string'
function get_url(){
local src="$1"
src="${src##*/}" # remove the longest string before and including /
echo "${src%%\'*}" # remove the longest string after and including '
}
# read each line.
while read line
do
echo "$(get_url "$line")"
done < "${1:-/proc/${$}/fd/0}"
# end get_urls.sh
cat file.php | grep 'URL' | cut -d "'" -f 4
.