Shell 如何用引号grep一行,然后比较其中的内容

Shell 如何用引号grep一行,然后比较其中的内容,shell,Shell,我有许多包含字符串的文件,如: code="AA123",code_mark="AI123" code="AA234",code_mark="AI234" code="AA456",code_mark="AI456" code="AA789",code_mark="AI789" code="AA321",code_ma

我有许多包含字符串的文件,如:

code="AA123",code_mark="AI123"
code="AA234",code_mark="AI234"
code="AA456",code_mark="AI456"
code="AA789",code_mark="AI789"
code="AA321",code_mark="AI321"
code="AA111",code_mark="AI111"
code="AA222",code_mark="AI221"
前缀AA和AI应始终与行中的相同,但在某些情况下,
code\u-mark=“AA\35;\35;”
而不是
code\u-mark=“AI”
。我想找到那些行,例如:

code="AA451",code_mark="AA451"
code="AA121",code_mark="AA121"
code="AA272",code_mark="AA272"

我尝试了好几个小时,但我唯一的成就就是把文本放在括号之间。有没有办法对所有与上述模式不匹配的行进行grep?

使用
grep
,如下所示:

grep 'AA.*AA' input_file(s)
# or:
grep -v 'AA.*AI' input_file(s)
例如:

创建输入文件:

cat > in.txt <<EOF
code="AA123",code_mark="AI123" (this is on one line)
code="AA234",code_mark="AI234" (this is on one line)
code="AA456",code_mark="AI456" (this is on one line)
code="AA789",code_mark="AI789' (this is on one line)
code="AA321",code_mark="AI321" (this is on one line)
code="AA111",code_mark="AI111" (this is on one line)
code="AA222",code_mark="AI221" (this is on one line)
code="AA451",code_mark="AA451" (wrong case)
code="AA121",code_mark="AA121" (wrong case)
code="AA272",code_mark="AA272" (wrong case)
EOF
印刷品:

code="AA451",code_mark="AA451" (wrong case)
code="AA121",code_mark="AA121" (wrong case)
code="AA272",code_mark="AA272" (wrong case)
另请参见:

使用
grep
,如下所示:

grep 'AA.*AA' input_file(s)
# or:
grep -v 'AA.*AI' input_file(s)
例如:

创建输入文件:

cat > in.txt <<EOF
code="AA123",code_mark="AI123" (this is on one line)
code="AA234",code_mark="AI234" (this is on one line)
code="AA456",code_mark="AI456" (this is on one line)
code="AA789",code_mark="AI789' (this is on one line)
code="AA321",code_mark="AI321" (this is on one line)
code="AA111",code_mark="AI111" (this is on one line)
code="AA222",code_mark="AI221" (this is on one line)
code="AA451",code_mark="AA451" (wrong case)
code="AA121",code_mark="AA121" (wrong case)
code="AA272",code_mark="AA272" (wrong case)
EOF
印刷品:

code="AA451",code_mark="AA451" (wrong case)
code="AA121",code_mark="AA121" (wrong case)
code="AA272",code_mark="AA272" (wrong case)
另请参见:


括号之间的
不是,你是指引号吗<代码>比较AA不等于AI的情况?
要比较字母的数量吗?你能解释一下你到底想比较什么吗?请发布示例文件内容。请发布您希望在输出上获得的内容-文件名?还是内容?或者两者都有?为什么不干脆用grep表示
code\u-mark=“AA
grep'code\u-mark=“AA”
?是的,对不起,我是说双引号“。我想要两者,我想要所有与初始逻辑AA AI不匹配的情况作为输出,例如,code=“AA123”、code\u-mark=“AA123”、code=“AA567”、code\u-mark=“AA567”、code=“AA789”、code\u-mark=“AA789”ecc..So
grep”code=“AA[0-9]”、code\u-mark=“AA[0-9]”“+”
?你可以在上学习正则表达式,它肯定是一个有用的工具。是的,这就是我一直在寻找的,不幸的是,当我启动它时,它没有返回任何东西。我像这样启动了grep'code=“AA[0-9]+”,code_-mark=“AA[0-9]+”'文件*我只尝试了没有逗号的第一部分,但也没有工作,我不得不使用egrep'code=“AA[0-9]+”'文件*可能是因为在代码和代码标记之间的文件中有一个实际的逗号?
在括号之间
不是,你是指引号吗<代码>比较AA不等于AI的情况?
要比较字母的数量吗?你能解释一下你到底想比较什么吗?请发布示例文件内容。请发布您希望在输出上获得的内容-文件名?还是内容?或者两者都有?为什么不干脆用grep表示
code\u-mark=“AA
grep'code\u-mark=“AA”
?是的,对不起,我是说双引号“。我想要两者,我想要所有与初始逻辑AA AI不匹配的情况作为输出,例如,code=“AA123”、code\u-mark=“AA123”、code=“AA567”、code\u-mark=“AA567”、code=“AA789”、code\u-mark=“AA789”ecc..So
grep”code=“AA[0-9]”、code\u-mark=“AA[0-9]”“+”
?你可以在上学习正则表达式,它肯定是一个有用的工具。是的,这就是我一直在寻找的,不幸的是,当我启动它时,它没有返回任何东西。我像这样启动了grep'code=“AA[0-9]+”,code\u mark=“AA[0-9]+”'文件*我只尝试了没有逗号的第一部分,但也不起作用,我必须使用egrep'code=“AA[0-9]+”'文件*可能是因为在代码和代码标记之间的文件中有一个实际的逗号?谢谢,但如果文件中AA和AI始终相同,但数字每次都会改变,这意味着它可以是AA123 AA234 AA321呢AA442@MarcoPolo我不确定我是否理解你的评论。如果你用更多的输入和期望的输出案例来编辑问题,这将对我和其他能够回答你问题的人有所帮助。请在您的评论中包括您提到的输入和所需输出的案例。当然,我已经编辑了我的初始消息以使其更清楚:)@MarcoPolo输入示例现在已经清楚了,谢谢。但是,与此输入示例相对应的期望输出示例是什么?现在还不清楚,抱歉…不用担心,我用指定的输出更新了。理想情况下,知道错误案例来自哪个文件也很酷,因为我有一个10个文件的列表。谢谢,但如果文件中AA和AI总是相同,但数字每次都会变化,这意味着它可能是AA123 AA234 AA321呢AA442@MarcoPolo我不确定我是否理解你的评论。如果你用更多的输入和期望的输出案例来编辑问题,这将对我和其他能够回答你问题的人有所帮助。请在您的评论中包括您提到的输入和所需输出的案例。当然,我已经编辑了我的初始消息以使其更清楚:)@MarcoPolo输入示例现在已经清楚了,谢谢。但是,与此输入示例相对应的期望输出示例是什么?现在还不清楚,抱歉…不用担心,我用指定的输出更新了。理想情况下,知道错误案例来自哪个文件也很酷,因为我有10个文件的列表。