Linux 第一次出现数字后的grep字符串

Linux 第一次出现数字后的grep字符串,linux,string,unix,grep,Linux,String,Unix,Grep,如何在数字首次出现后获取字符串 例如,我有一个包含多行的文件: 34 abcdefg 10 abcd 123 999 abc defg 我希望获得以下输出: abcdefg abcd 123 abc defg 谢谢。您可以使用sed删除数字和空白: sed -E 's/[0-9 ]+//' file 您可以使用sed删除数字和空白: sed -E 's/[0-9 ]+//' file 您可以使用Awk,循环遍历每行中的所有列,直到NF(每行的最后一列),并在匹配第一个单词后,

如何在数字首次出现后获取字符串

例如,我有一个包含多行的文件:

  34 abcdefg
10 abcd 123
    999 abc defg
我希望获得以下输出:

abcdefg
abcd 123
abc defg

谢谢。

您可以使用
sed
删除数字和空白:

sed -E 's/[0-9 ]+//' file

您可以使用
sed
删除数字和空白:

sed -E 's/[0-9 ]+//' file

您可以使用Awk,循环遍历每行中的所有列,直到
NF
(每行的最后一列),并在匹配第一个单词后,打印其旁边的列。
break
语句将在第一次迭代后退出for循环

awk '{ for(i=1;i<=NF;i++) if ($i ~ /[[:digit:]]+/) { print $(i+1); break } }' file

awk'{for(i=1;i您可以使用awk进行此操作,将每行中的所有列循环到
NF
(每行的最后一列),并在匹配第一个单词后,打印其旁边的列。
break
语句将在第一次迭代后退出for循环

awk '{ for(i=1;i<=NF;i++) if ($i ~ /[[:digit:]]+/) { print $(i+1); break } }' file

awk'{for(i=1;i想象以下两个输入文件:

  001 ham
03spam
  3 spam with 5 eggs
awk的快速解决方案是:

awk '{sub(/[^0-9]*[0-9]+/,"",$0); print $1}' <file>
如果您对该行的其余部分感兴趣

awk '{sub(/[^0-9]*[0-9]+ */,"",$0); print $0}' <file>
请注意,正则表达式中需要一个额外的
“*”
,以删除数字后面的所有尾随空格。如果没有它,您将得到

awk '{sub(/[^0-9]*[0-9]+/,"",$0); print $0}' <file>

 ham
spam
 spam with 5 eggs
awk'{sub(/[^0-9]*[0-9]+/,“”,$0);打印$0}'
火腿
垃圾邮件
带5个鸡蛋的垃圾邮件

想象以下两个输入文件:

  001 ham
03spam
  3 spam with 5 eggs
awk的快速解决方案是:

awk '{sub(/[^0-9]*[0-9]+/,"",$0); print $1}' <file>
如果您对该行的其余部分感兴趣

awk '{sub(/[^0-9]*[0-9]+ */,"",$0); print $0}' <file>
请注意,正则表达式中需要一个额外的
“*”
,以删除数字后面的所有尾随空格。如果没有它,您将得到

awk '{sub(/[^0-9]*[0-9]+/,"",$0); print $0}' <file>

 ham
spam
 spam with 5 eggs
awk'{sub(/[^0-9]*[0-9]+/,“”,$0);打印$0}'
火腿
垃圾邮件
带5个鸡蛋的垃圾邮件

grep
可以完成以下工作:

$ grep -o -P '(?<=[0-9] ).*' inputFIle
abcdefg
abcd 123
abc defg

grep
可以完成以下任务:

$ grep -o -P '(?<=[0-9] ).*' inputFIle
abcdefg
abcd 123
abc defg

不清楚您到底想要什么,但您可以尝试用
sed
来表达。 删除所有内容,直到第一个数字、下一个数字和所有空格

sed 's/[^0-9]*[0-9]\+ *//'

不清楚您到底想要什么,但您可以尝试用
sed
来表达。 删除所有内容,直到第一个数字、下一个数字和所有空格

sed 's/[^0-9]*[0-9]\+ *//'

感谢您的回复,但是,我需要删除第一个出现的数字,因为我需要的字符串可能有数字。@Jeugasce Maybe(不,肯定)您应该在原始问题中添加该要求,以及一些要测试的样本行。谢谢您的回答,但是,我需要删除第一个出现的数字,因为我需要的字符串可能有数字。@Jeugasce Maybe(不,肯定)您应该在原始问题中添加该要求以及一些要测试的示例行。感谢您的回答!但是,awk“{sub(/[^0-9]*[0-9]+/,”,“,$0);print$1}”'只打印到下一个空格符号。是否有方法打印字符串的其余部分?@Jeugasce,将
print$1
替换为
print$0
,请注意,这样可以在字符串之前保留剩余的空格。第二行awk将删除空格并打印整行。感谢您的回复!但是,awk'{sub(/[^0-9]*[0-9]+/,“”,$0);print$1}只打印到下一个空格符号。是否有方法打印字符串的其余部分?@Jeugasce,将
print$1
替换为
print$0
,注意,这样可以在字符串之前保留空格。第二行awk将删除空格并打印整行。