如何在第一次出现数字后获取字符串?
例如,我有一个包含多行的文件:
34 abcdefg
10 abcd 123
999 abc defg
我想获得以下输出:
abcdefg
abcd 123
abc defg
谢谢。
答案 0 :(得分:2)
你可以使用Awk,循环遍历每行中的所有列到NF
(每行的最后一列),一旦匹配第一个单词,打印旁边的列。 break
语句将在第一次迭代后退出for循环。
awk '{ for(i=1;i<=NF;i++) if ($i ~ /[[:digit:]]+/) { print $(i+1); break } }' file
答案 1 :(得分:1)
目前尚不清楚您究竟想要什么,但您可以尝试在sed
中表达它。
删除所有内容,直到第一个数字,下一个数字和任何空格。
sed 's/[^0-9]*[0-9]\+ *//'
答案 2 :(得分:0)
您可以使用sed
删除数字和空格:
sed -E 's/[0-9 ]+//' file
答案 3 :(得分:0)
想象一下以下两个输入文件:
001 ham
03spam
3 spam with 5 eggs
使用awk的快速解决方案是:
awk '{sub(/[^0-9]*[0-9]+/,"",$0); print $1}' <file>
此行将第一个字符串替换为不包含数字的任何内容,后跟数字乘以空集(""
)。这种方式$0
被重新定义,您可以重新打印第一个字段或字段的其余部分。该行给出了以下输出。
ham
spam
spam
如果您对该行的其余部分感兴趣
awk '{sub(/[^0-9]*[0-9]+ */,"",$0); print $0}' <file>
这将作为输出:
ham
spam
spam with 5 eggs
请注意,正则表达式中需要额外的" *"
以删除数字后面的所有尾随空格。没有它,你会得到
awk '{sub(/[^0-9]*[0-9]+/,"",$0); print $0}' <file>
ham
spam
spam with 5 eggs
答案 4 :(得分:0)
grep
可以完成这项工作:
$ grep -o -P '(?<=[0-9] ).*' inputFIle
abcdefg
abcd 123
abc defg
为了完整起见,这是一个perl
的解决方案:
$ perl -lne 'print $1 if /[0-9]+\s*(.*)/' inputFIle
abcdefg
abcd 123
abc defg