Linux 使用grep在线匹配模式

Linux 使用grep在线匹配模式,linux,shell,command-line,grep,Linux,Shell,Command Line,Grep,我需要用逗号分隔的值grep文件中的行,并将输出定向到另一个文件。因此,如果第二个值以“U”开头,最后一个值为“Success”,则此行与模式匹配 应符合以下模式: 324,U63@DOM1,U63@DOM1,C1755,C1755,Kerberos,Network,LogOn,Success 如果不匹配: 456,C1164$@DOM1,C1164$@DOM1,C625,C625,?,Network,LogOff,Success 123,U63@DOM1,C11847$@?,C2109,C2

我需要用逗号分隔的值grep文件中的行,并将输出定向到另一个文件。因此,如果第二个值以“U”开头,最后一个值为“Success”,则此行与模式匹配

应符合以下模式:

324,U63@DOM1,U63@DOM1,C1755,C1755,Kerberos,Network,LogOn,Success
如果不匹配:

456,C1164$@DOM1,C1164$@DOM1,C625,C625,?,Network,LogOff,Success
123,U63@DOM1,C11847$@?,C2109,C2109,?,?,TGT,Fail
谢谢大家!

grep '^[^,]*,U.*,Success$'
查找第一个逗号a
U
,最后一个逗号,
Success
和行尾


查找第一个逗号,a
U
,最后一个逗号,
Success
和行尾。

随着列匹配要求变得更加复杂,一个
awk
解决方案变得更具吸引力:

awk -F, '$2 ~ /^U/ && $(NF) == "Success"'
(匹配的默认操作是打印该行。)

下面是使用
grep
的解决方案:

grep '^[^,]*,U.*,Success$'
sed

sed '/^[^,]*,U.*,Success$/ p; d'

随着柱状匹配要求变得更加复杂,
awk
解决方案变得更具吸引力:

awk -F, '$2 ~ /^U/ && $(NF) == "Success"'
(匹配的默认操作是打印该行。)

下面是使用
grep
的解决方案:

grep '^[^,]*,U.*,Success$'
sed

sed '/^[^,]*,U.*,Success$/ p; d'

你试过什么?这不是一项用于编写程序的服务,因为您不想这样做。
^[^,]+,U.*Success$
@Natecat:请注意,
+
需要
grep-E
(又名
egrep
)。谢谢@jonathan。这管用!是否必须使用
grep
?如果您使用
awk
,这似乎会更清晰。您尝试过什么?这不是一项用于编写程序的服务,因为您不想这样做。
^[^,]+,U.*Success$
@Natecat:请注意,
+
需要
grep-E
(又名
egrep
)。谢谢@jonathan。这管用!是否必须使用
grep
?如果您使用
awk
,这似乎会更清晰。