使用awk在文件中查找字符串

时间:2014-09-09 20:55:19

标签: shell

所以我想从文件中获取一个字符串,文件包含数据:

----------------------------------------------------
Id   Name      CreationDate         Comment
----------------------------------------------------
1    testing    19.10.11             created by jag

2    develop    19.10.12             created by jag

3    array      19.10.12             created by jaguuuu

4    start123   19.10.12             created by akj

我想grep start123但只使用start,因为不时跟随数字变化。所以它可能是start456,start567。但它将从开始****开始。

这是我到目前为止所尝试的:

awk '$0 ~ arr{print NR-1 FS b}{b=$0}' arr="start" /filepath
echo "string found : $arr"

更新: 另外,我想从第二列中仅提取start123,它可以在1-4或1的任何行中 - 无论是什么数字。一旦我得到字符串" start123",想要将它存储在一个变量中。 对不起,最初不清楚。

因此,如果我尝试通过由akj创建的comment =对其进行排序,并打印出start123。我认为它只是一个&&声明。 这样的事情会起作用吗?

arr=$(awk -v str=start '$2 ~ "^" str "[0-9]*" { print $2 }' /filepath)
 if [ -z "$arr" ]
 then echo "string not found"
 else echo "String found: $arr"
 fi

由于某种原因它不起作用。任何帮助,将不胜感激。

由于

凯尔

2 个答案:

答案 0 :(得分:2)

您可以使用-o的{​​{1}}选项仅打印与正则表达式匹配的文件部分。在这种情况下,它的grep后跟任意数量的数字。

start

如果您只想在第2列中找到它,可以使用awk:

str=start
if arr=$(grep -o "$str[0-9]*" /filepath)
then echo "string found: $arr"
else echo "string not found"
fi

答案 1 :(得分:1)

如果你有GNU awk:

gawk 'match($0, /(start[0-9]+)/, m) {print m[1]; exit}'

文档:http://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions