我现在有两个文本文件,其中一些行以相同的模式开头。例如,
文件A
1Mo 1,1 我爱你。 1Mo 1,2 我喜欢你。 嗨 23,3 我饿了。 嗨 23,4 我很愚蠢。
文件B
1Mo 1,1 Ich liebe dich。 1Mo 1,2 Ich mag dich。 嗨,23,5 我是杜斯特。 嗨,23,6 Ich bin neu。
文件 A 和文件 B 有两行,分别以相同的模式“1Mo 1,1”和“1Mo 1,2”开头。我的预期输出是这样的:
1Mo 1,1 我爱你。 1Mo 1,2 我喜欢你。 1Mo 1,1 Ich liebe dich。 1Mo 1,2 Ich mag dich。
我的想法是我应该使用 grep 提取文件 A 中每一行的开始模式,然后使用这些模式来匹配文件 B 中的每一行。我尝试编写一个 grep 命令,如下所示,但失败了:
grep "^[.Az]*\s[.]*\s" 文件 A > extract.txt
这是我搜索社区并改编为用于文件 B 中的字符串匹配的命令:
读取字符串时;执行 grep "$string" 文件 B;完成 < 提取.txt
有人知道如何使用 grep 进行模式提取和匹配吗?
答案1
文件:
> cat a
1Mo 1,1 I love you.
1Mo 1,2 I like you.
1Mo 1,3 I am hungry.
1Mo 1,4 I am foolish.
> cat b
1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
1Mo 1,5 Ich habe Durst.
1Mo 1,6 Ich bin neu.
找到共享前两个单词的公共行(空格分隔):
> awk '{print $1 " " $2}' a > find
> grep -f find b | awk '{print $1 " " $2}' > find2
现在找到与这些模式匹配的所有行:
> grep -f find2 a b
a:1Mo 1,1 I love you.
a:1Mo 1,2 I like you.
b:1Mo 1,1 Ich liebe dich.
b:1Mo 1,2 Ich mag dich.
最后,过滤文件名:
> grep -f find2 a b | sed 's/^[^:]*://'
1Mo 1,1 I love you.
1Mo 1,2 I like you.
1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
答案2
Grep 排除多个参数,您可以在示例中使用这一简单模式。
grep -Eh '1,1|1,2' "File A" "File B"