桑达。如何从另一个文件打印匹配模式的行?

时间:2016-01-09 18:52:11

标签: sed match filenames

我的file1包含一些文本,例如:

abcdef 123456 abcdef
ghijkl 789123 abcdef
mnopqr 123456 abcdef

我有包含单行文本的file2,我想用它作为模式:

ghijkl 789123

如何使用第二个文件作为模式使用sed将包含它的行打印到第三个文件?像file3:

ghijkl 789123 abcdef

我试过用

sed -ne "s/r file2//p" file1 > file3

但是由于某种原因,file3的内容是空白的 附:使用Windows

3 个答案:

答案 0 :(得分:2)

如果您有sed,是否可以访问grep

grep -f file2 file1 > file3

答案 1 :(得分:0)

sed解决方案是:

    cat f2.txt | xargs -I {} sed -n "/{}/p" f1.txt > f3.txt

但是,正如@Cyrus正确指出的那样,grep是此解决方案的正确工具,它更好:

    grep -f f2.txt f1.txt > f3.txt

注意:使用这些功能强大的* nix工具,例如sedgrepcatxargsbash,在Microsoft Windows上等等可能令人沮丧。考虑一下Linux环境,相反 - 你可以节省很多时间来处理来自Cygwin等模拟器的细微路径和环境问题。

答案 2 :(得分:0)

这是linux上最简单的sed解决方案:sed -n /`<file2`/p file1 > file3,但是windows不提供反引号。所以窗户的解决方法是:

set /p PATERN=<file2
sed -n /%PATERN%/p file1 > file3