如何通过将Grep输出管道输出到Sed来预先设置可变模式?

时间:2016-11-01 21:55:04

标签: linux bash awk sed grep

我在两个文件中有以下数据:

domains.txt包含:

http://example1.com

urls.txt包含:

http://example1.com/url-example/
http://example5.com/url-example/
http://example2.com/url-example/

使用以下命令(我使用此结构,因为通常文件中有更多内容,这只是一个最小的例子):

cat domains.txt | while read LINE; do grep -m 1 "$LINE" urls.txt

这将给我匹配的行。

http://example1.com/url-example/

但是,我希望输出为:

http://example1.com,http://example1.com/url-example/

我想添加一个在匹配输出之前添加"LINE"变量的管道。我在想sed应该很容易吗?非常感谢您的意见。

更新

尽管使用awk这很容易,但如果某人有一个管道输出的答案,我想用它来使用脚本。

2 个答案:

答案 0 :(得分:2)

while IFS= read -r line; do echo -n "$line,"; grep -m 1 "$line" urls.txt; done < domains.txt

答案 1 :(得分:1)

使用awk很容易做到:

while read LINE; do awk -v pattern="$LINE" '$0 ~ pattern { print pattern "," $0 }' urls.txt; done < domains.txt

或者使用sed:

while read LINE; do sed -ne "s?$LINE.*?$LINE,&?p" urls.txt; done < domains.txt

要回答您的后续问题,请使用awk将结果限制为第一场比赛:

while read LINE; do awk -v pattern="$LINE" '$0 ~ pattern { print pattern "," $0; exit }' urls.txt; done < domains.txt