Answers:
像这样吗
grep 'URL' file.php | rev | cut -d "'" -f 2 | rev
要么
grep 'URL' file.php | cut -d "'" -f 4 | sed s/'http:\/\/'/''/g
删除http://。
http://url.com
不是url.com
/
ins 匹配时,通常应使用其他定界符,例如sed s@http://@@g
。
您可以使用简单的方法完成所有操作grep
:
grep -oP "http://\K[^']+" file.php
来自man grep
:
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression (PCRE, see
below). This is highly experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
诀窍是使用\K
Perl regex中的手段discard everything matched to the left of the \K
。因此,正则表达式将查找以http://
(以开头,然后由于丢弃\K
)后跟尽可能多的非'
字符的字符串。与结合使用-o
,这意味着将仅打印URL。
您也可以直接在Perl中执行此操作:
perl -ne "print if s/.*http:\/\/(.+)\'.*/\$1/" file.php\
再次回顾此问题,并尝试仅使用Bash shell,另一种解决方案是:
while read url; do url="${url##*/}" && echo "${url%%\'*}"; done < file.in > file.out
其中file.in包含“脏” URL列表,而file.out将包含“干净” URL列表。没有外部依赖关系,也不需要产生任何新的进程或子shell。原始说明和更灵活的脚本如下。还有就是方法的一个很好的总结在这里,见例子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
无需调用任何外部程序。此外,以下bash脚本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
[t]csh
,因此对sh,bash,dash,ksh,zsh
如果所有行都包含URL:
awk -F"'|http://" '{print $5}' file.php
如果仅某些行包含URL:
awk -F"'|http://" '/^define/ {print $5}' file.php
根据其他行,您可能需要更改^define
正则表达式
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
简单:
php -r 'include("file.php"); echo URL;'
并且如果您需要删除“ http://”,则:
php -r 'include("file.php"); echo URL;' | sed 's!^http://\(.*\)!\1!'
所以:
myURL=$(php -r 'include("file.php"); echo URL;' | sed 's!^http://\(.*\)!\1!')
如果您需要URL 的特定部分,则需要改进术语,URL是以下所有内容,有时甚至更多:
URL := protocol://FQDN[/path][?arguments]
FQDN := [hostname.]domain.tld
cat file.php | grep 'URL' | cut -d "'" -f 4
。