【发布时间】:2016-06-21 13:16:51
【问题描述】:
我有一个输入文件,如下所示:
$Interesting line
$Interesting line 2
#Also interesting line
Non interesting line - filter out
$another interesting line
Interesting line contains FiRsT pattern
Another non interesting line
Interesting line contains sec"o^nd pattern
#Interesting line
我有另一个模式文件,其中包含我要过滤的模式(请注意,模式文件可能包含有问题的字符 - 我想将它们称为简单字符,而不是通配符/正则表达式):
FiRsT
sec"o^nd
我希望得到以下结果:
$Interesting line
$Interesting line 2
#Also interesting line
$another interesting line
Interesting line contains FiRsT pattern
Interesting line contains sec"o^nd pattern
#Interesting line
即过滤掉以下两行:
Non interesting line - filter out
Another non interesting line
更准确地说,我希望结果文件中的所有行都包含模式文件的任何字符串,或者行以 # 或 $ 开头(顺序很重要)。
我知道如何从模式文件中过滤字符串:
grep -F -f pattern_file.txt input_file.txt
我知道如何过滤所有以 $ 和 # 开头的行:
grep '^\$\|^#' input_file.txt
但是我应该怎么做呢?唯一的方法是为此编写一个简短的子脚本,还是我仍然可以使用简单的 grep/sed/任何标准的 linux 命令?
再次提醒:
- 行的顺序很重要,必须与原始输入文件的顺序相匹配。
- 模式文件可能包含有问题的字符,我想将它们称为常规字符(而不是通配符/正则表达式)。
编辑:考虑以下情况:
输入文件也包含
Interesting line with ^third pattern
模式文件包含
^third
当然,我希望该行出现在结果文件中。这就是为什么我不能引用没有 -F 标志的模式文件,也不能只添加 ^\$ 和 ^# 行。
【问题讨论】: