如何查找和打印特定信息

时间:2015-12-07 18:33:16

标签: bash awk capturing-group

我试图让awk只打印一个特定的信息。当它只涉及简单的文本字符串时我可以做到。但当我要求搜索和打印类似的内容时,它无法正常工作:

/[0-9]*\.[0-9]*\.[0-9]*\.[0-99]*\.[0-999]*/

我正在寻找用点分隔的数字,几乎就像ip地址一样。例如:#。#。#。##。###其中#=整数

例如:

这只打印“TEXT”并且工作正常。

awk '{for(i=1;i<=NF;i++){ if($i==“TEXT”){print $i} } }' source.txt > result.txt

这应该打印我需要的东西,但不起作用。

awk '{for(i=1;i<=NF;i++){ if($i==“/[0-9]*\.[0-9]*\.[0-9]*\.[0-99]*\.[0-999]*/”){print $i} } }' source.txt > result.txt

这样可以正常工作但打印整行,而不仅仅是我需要的东西:

awk -F"\t" '/[0-9]*\.[0-9]*\.[0-9]*\.[0-99]*\.[0-999]*/{ print }' source.txt > result.txt

我做错了什么?

2 个答案:

答案 0 :(得分:1)

正在使用&#34; ==&#34;而不是&#34;〜&#34;和不必要的报价。

这很好用:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.remaxer.codenameone.edmtuner/com.remaxer.codenameone.edmtuner.EdmTunerStub}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.codename1.j.o com.codename1.impl.a.z()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
at android.app.ActivityThread.access$900(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5832)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.codename1.j.o com.codename1.impl.a.z()' on a null object reference
at com.codename1.j.k.x(Display.java:2172)
at com.codename1.impl.android.CodenameOneActivity.onCreateOptionsMenu(CodenameOneActivity.java:358)
at android.app.Activity.onCreatePanelMenu(Activity.java:2921)
at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:599)
at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:973)
at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:305)
at com.android.internal.policy.impl.PhoneWindow.doPendingInvalidatePanelMenu(PhoneWindow.java:947)
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2185)
at android.app.Activity.onRestoreInstanceState(Activity.java:1082)
at android.app.Activity.performRestoreInstanceState(Activity.java:1027)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1175)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2631)
... 10 more

答案 1 :(得分:1)

为什么你使用像[0-9] *这样的正则表达式? - 我的意思是为什么&#39; *&#39; ?意思是你正在寻找任何数字(包括零)的数字? [0-9]就足够了。如果你想要多次重复但是有限,只需重复:/ [0-9]。[0-9]。[0-9]。[0-9] [0-9]。[0-9] [0-9 ] [0-9] /##。#。#。##。###

awk '{for(i=1;i<=NF;i++) \
{ if($i ~ /[0-9]\.[0-9]\.[0-9]\.[0-9][0-9]\.[0-9][0-9][0-9]/){print $i} } }' jfinancas.txt > teste5.txt

使用gawk(gnu awk),您可以在regexp [0-9] {3}内管理重复,将完全匹配3位数。