Sed linux上混合文件中特定于Grep的字符串
如何从此输出中仅提取字符串q9I9YP1V013809:Sed linux上混合文件中特定于Grep的字符串,sed,awk,tr,Sed,Awk,Tr,如何从此输出中仅提取字符串q9I9YP1V013809: q9I9YP1V013809 1472 Thu Oct 18 11:34 test@test.com test1@test.com test2@test.com test3@
q9I9YP1V013809 1472 Thu Oct 18 11:34 test@test.com
test1@test.com
test2@test.com
test3@test.com
预期视图:
q9I9YP1V013809
许多方法中的一种。如果第一个字段不包含
@
,请打印它
awk '$1 !~ /@/ { print $1; }' infile
许多方法中的一种。如果第一个字段不包含
@
,请打印它
awk '$1 !~ /@/ { print $1; }' infile
要跳过所有以空格开头的行,并删除空格后面的所有内容以存放其余文件,请执行以下操作:
grep -v '^ ' file.in | sed "s/ .*//"
与awk相比,您需要启动两个流程,但要做的事情要清楚得多
另一种解决方案,仅限sed:
sed "/^ /d;s/ .*//" file.in
没有那么清楚,但只有一个过程。第一个
sed
命令(/^/d
)删除所有以空格开头的行;第二个命令与上述命令相同。要跳过所有以空格开头的行,并删除剩余文件空格后的所有内容,请执行以下操作
grep -v '^ ' file.in | sed "s/ .*//"
与awk相比,您需要启动两个流程,但要做的事情要清楚得多
另一种解决方案,仅限sed:
sed "/^ /d;s/ .*//" file.in
没有那么清楚,但只有一个过程。第一个
sed
命令(/^/d
)删除所有以空格开头的行;第二个命令与上述命令相同。您可以检查是否存在@
字符,或者根据此命令中出现的字段进行检查:
awk 'NF > 5 { print $1 }' input.file
您可以检查是否存在
@
字符,或根据此命令中显示的字段进行检查:
awk 'NF > 5 { print $1 }' input.file
我会:
awk 'NF>1{print $1}' file
因为OP没有提到预期字符串的任何规则。它也可能有“@”
测试:
我会:
awk 'NF>1{print $1}' file
因为OP没有提到预期字符串的任何规则。它也可能有“@”
测试:
如果它始终是第一个单词,并且其他行的前缀为空格,请使用:
<infile grep -Eo '^[^[:blank:]]+'
如果它始终是第一个单词,而其他行的前缀是空白,请使用:
<infile grep -Eo '^[^[:blank:]]+'
为什么awk不清楚?我个人认为情况正好相反,比如在sed
和grep
中,你需要记住所有的标志,而awk
可以使用简单的通用运算符完成。是的,但当我有多个类似的条目时,我会在sed之后得到许多新行简单输出:q9I6OEFg003411 q9IBZWhC012017q9IBZRsb011962@Bernhard字体每个人都有自己的最爱。我特别不喜欢awk,尽管在学习perl之前我一直在紧张地使用它。@KalinBorisov:那么,问题出在哪里呢?我以为这就是我的意图?让我解释一下,当我有许多来自右侧的电子邮件时,您的代码会在其中留下空白,关于特定字符串上有多少邮件为什么awk不清楚?我个人认为情况正好相反,比如在sed
和grep
中,你需要记住所有的标志,而awk
可以使用简单的通用运算符完成。是的,但当我有多个类似的条目时,我会在sed之后得到许多新行简单输出:q9I6OEFg003411 q9IBZWhC012017q9IBZRsb011962@Bernhard字体每个人都有自己的最爱。我特别不喜欢awk,尽管在学习perl之前我一直在紧张地使用它。@KalinBorisov:那么,问题出在哪里呢?我以为这就是我的意图?让我解释一下,当我有许多来自右侧的电子邮件时,您的代码会在其中的某个字符串上留下空白,其中有多少邮件位于该字符串上