grep 模式及其之后的内容,并删除其他内容

grep 模式及其之后的内容,并删除其他内容

我在 grep 特定关键字及其内容时遇到问题。这是示例文件,实际文件比这个大。

例子

user@linux:~$ cat url.txt 
abcrandomtextdef another random text blablabla
another random iwantthis text abcrandomtextdef url=https://www.google.com ghirandomtextjkl
ghirandomtextjkl another random text yadayada
wxyz iwantthis abcdef url=yahoo.com yaday
user@linux:~$ 

期望的输出是这样的。

iwantthis url=https://www.google.com
iwantthis url=yahoo.com

这些是我获得该输出的尝试,但如您所见,它并没有真正起作用。

user@linux:~$ grep url= url.txt | cut -d ' ' -f3,6
iwantthis url=https://www.google.com
abcdef
user@linux:~$ 

答案1

sed似乎是正确的任务:

% sed -n 's/.* \(iwantthis\) .* \(url=[^ ]*\) .*/\1 \2/p' url.txt
iwantthis url=https://www.google.com
iwantthis url=yahoo.com

这是如何运作的:

-n-- 只打印与“p”命令匹配的行

s/.../p -- 搜索和替换,打印匹配的行

.* \(iwantthis\) .* \(url=[^ ]*\) .* -- 这将查找由空格包围的单词“iwantthis”并记住它,还会查找后跟非空格的“url=”,并记住它。两端.*的 表示“iwantthis”之前的内容和 URL 之后的内容将被丢弃。

/\1 \2-- 替换为记住的两个单词

相关内容