【问题标题】:Sed. How to print lines matching pattern from another file?赛德。如何从另一个文件打印匹配模式的行?
【发布时间】:2016-01-09 18:52:10
【问题描述】:

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

abcdef 123456 abcdef
ghijkl 789123 abcdef
mnopqr 123456 abcdef

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

ghijkl 789123

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

ghijkl 789123 abcdef

我试过了

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

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

【问题讨论】:

    标签: sed match filenames


    【解决方案1】:

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

    grep -f file2 file1 > file3
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 那就更好了!更适合我的剧本。你有我的感激之情!
      【解决方案3】:

      sed 的解决方案是:

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

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

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

      注意:在 Microsoft Windows 上使用这些功能非常强大的 *nix 工具(如 sedgrepcatxargsbash 等)可能会令人沮丧。相反,请考虑启动一个 Linux 环境——您可以省去很多时间来处理来自 Cygwin 等模拟器的微妙路径和环境问题。

      【讨论】:

      • 在我发布它后对 linux 也有同样的想法。感谢 sed 解决方案,我想我也需要自己养猫。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 1970-01-01
      相关资源
      最近更新 更多