我在 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
-- 替换为记住的两个单词