在grep中的起点和终点之间提取文本 - 仅限第一个实例

时间:2014-10-27 08:12:54

标签: awk sed grep

如何仅在第一个实例的字符串之间提取文本。

来源:

test66="keyword1"y67h6y7 test66="keyword2"hj67h67j
test66="keyword3"f54fd543f456

输出:

keyword1

4 个答案:

答案 0 :(得分:1)

sed -n '/test66="\(.*\)"/ {s//\1/p; q}' source.txt

灵感来自:https://stackoverflow.com/a/17086464/4323

答案 1 :(得分:1)

grep -m 1 -oP 'test66="\K[^"]*'

输出:

keyword1

答案 2 :(得分:0)

awk way
适用于您更新的要求

awk '{x=match($0,/test66="([^"]+)"/,a)}x{print a[1];exit}' file

sed way

sed -n '/test66="\([^"]\+\)".*/{s//\1/p;q}' file

他们两者完全相同。

1.搜索字符串

2.存在引号之间的值。

3.打印该值

4.Quit

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -r '/test66="/{s//\n/;s/^[^\n]*\n([^"]*)".*/\1/;q}' file

用标记\n替换所需的图案,并删除标记两侧的字符串,打印并退出。