我有一个文件,其中包含网址。我正在尝试使用 shell 脚本从该文件获取 URL。
在该文件中,URL 如下:
('URL', 'http://url.com');
我尝试使用以下内容:
cat file.php | grep 'URL' | awk '{ print $2 }'
其输出结果如下:
'http://url.com');
但我只需要获取url.com
shell 脚本中的一个变量。我该如何实现呢?
答案1
你可以用一个简单的方法做所有事情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 正则表达式中,表示discard everything matched to the left of the \K
。因此,正则表达式会查找以 开头的字符串http://
(由于 ,因此会被丢弃\K
),后面跟着'
尽可能多的非 字符。与 结合使用-o
,这意味着只会打印 URL。
您也可以直接在 Perl 中执行此操作:
perl -ne "print if s/.*http:\/\/(.+)\'.*/\$1/" file.php\
答案2
像这样吗?
grep 'URL' file.php | rev | cut -d "'" -f 2 | rev
或者
grep 'URL' file.php | cut -d "'" -f 4 | sed s/'http:\/\/'/''/g
删除 http://。
答案3
尝试这个,
awk -F// '{print $2}' file.php | cut -d "'" -f 1
答案4
如果所有行都包含 URL:
awk -F"'|http://" '{print $5}' file.php
如果只有部分行包含 URL:
awk -F"'|http://" '/^define/ {print $5}' file.php
根据其他行,您可能需要更改^define
正则表达式