【发布时间】:2013-05-29 12:54:08
【问题描述】:
我正在尝试从包含某个标签的文件中提取数据/url(在本例中为 someurl)。
xyz>someurl>xyz
我不介意使用awk 或sed。
【问题讨论】:
-
可能与:stackoverflow.com/questions/13386080/… 相同,虽然那里的例子很丑。
我正在尝试从包含某个标签的文件中提取数据/url(在本例中为 someurl)。
xyz>someurl>xyz
我不介意使用awk 或sed。
【问题讨论】:
我认为最好、最简单的方法是使用cut:
$ echo "xyz>someurl>xyz" | cut -d'>' -f2
someurl
使用awk 可以这样做:
$ echo "xyz>someurl>xyz" | awk 'BEGIN { FS = ">" } ; { print $2 }'
someurl
而sed 则有点棘手:
$ echo "xyz>someurl>xyz" | sed 's/\(.*\)>\(.*\)>\(.*\)/\2/g'
someurl
我们得到 something1<something2<something3 块并打印第二个。
【讨论】:
grep 为提取东西而生:
kent$ echo "xyz>someurl>xyz"|grep -Po '>\K[^>]*(?=>)'
someurl
你当然可以用炸弹杀死一只苍蝇:
kent$ echo "xyz>someurl>xyz"|awk -F\> '$0=$2'
someurl
【讨论】:
[^>] 表示任何字符而不是 > 和 (?=>) 是前瞻。匹配 char 后跟 >
如果您的grep 支持P 选项,那么您可以使用lookahead 和lookbehind 正则表达式来识别url。
$ echo "xyz>someurl>xyz" | grep -oP '(?<=xyz>).*(?=>xyz)'
someurl
这只是一个让您入门的示例,而不是最终答案。
【讨论】: