我的文件包含以下内容:
(visible:true)
url(http://style.ep.com/image/control/flash1-tab.gif)
<img src="http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg" alt="god">
<script src="http://img1.ep.com/4667/codeFromLink.js"></script>
我想获取url(和)之间的内容,同时src =“和”,结果如下:
http://style.ep.com/image/control/flash1-tab.gif
http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg
http://img1.ep.com/4667/codeFromLink.js
我用过以下:
awk 'BEGIN{RS=")";FS="("}NF>1{print $NF}' $file_obj
awk 'BEGIN{RS=" ";FS="src=\""}NF>1{print($NF)}' $file_obj |sed 's/\"//g'
但我得到了:
visible:true
http://style.ep.com/image/control/flash1-tab.gif
http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg
http://img1.ep.com/4667/codeFromLink.js></script>
怎么样? 非常感谢。
答案 0 :(得分:1)
非常短的grep解决方案:
grep -Po '(url\(|src=")\K[^")]*' "$file_obj"
您可以阅读\K
here。
或者更长一点,但更安全:
grep -Po 'url\(\K[^)]*|src="\K[^"]*' "$file_obj"
答案 1 :(得分:0)
使用grep
参数
-oP
$ grep -oP '(?<=url\()[^)]*|(?<=src=\")[^"]*' file
http://style.ep.com/image/control/flash1-tab.gif
http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg
http://img1.ep.com/4667/codeFromLink.js
通过awk,
$ awk -F\( '/^url/{sub(/.$/,"",$2); print $2}/src=/{split($0,a,"\""); print a[2]}' file
http://style.ep.com/image/control/flash1-tab.gif
http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg
http://img1.ep.com/4667/codeFromLink.js
答案 2 :(得分:0)
$ sed -r -n -e 's/url\(([^)]+).*/\1/p' file
http://style.ep.com/image/control/flash1-tab.gif
$ sed -r -n -e 's/.*src="([^"]+).*/\1/p' file
http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg
http://img1.ep.com/4667/codeFromLink.js
$ sed -r -n -e 's/url\(([^)]+).*/\1/p' -e 's/.*src="([^"]+).*/\1/p' file
http://style.ep.com/image/control/flash1-tab.gif
http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg
http://img1.ep.com/4667/codeFromLink.js
答案 3 :(得分:0)
简化的awk
解决方案:
awk -F'url\\(|\\)|src="|"' 'length($2) {print $2}' file
-F'url\\(|\\)|src="|"'
定义正则表达式,用作字段分隔符(存储在保留变量FS
中,-F
命令-line选项集),有效地包含以下标记:
url(
)
src="
"
(
和)
所需的双反斜杠转义。
awk
&#39> 一般字符串解析在第一遍中解释\
转义序列,因此\\
告诉它文字{{ 1}}应该成为生成的正则表达式的一部分,以便正则表达式引擎看到,例如\
,即:\(
字符应该字面(而不是启动捕获组。)。(
。$2
(隐含:length($2)
)可确保仅对找到URL的行执行打印命令length($2) > 0
。 警告:不会使用嵌入了{print $2}
个字符的网址,但这在实践中很少见。
要解决此问题,请改用以下内容:
)
答案 4 :(得分:0)
这是另一个gnu awk
(由于RS
包含多个字符而产生的gnu)
awk -v RS="http" -F'[")]' 'NR>1{print RS$1}' file
http://style.ep.com/image/control/flash1-tab.gif
http://img1.ep.com/4667/product/s-50f8f86cf0822.jpg.jpg
http://img1.ep.com/4667/codeFromLink.js