所以我想从文件中获取一个字符串,文件包含数据:
----------------------------------------------------
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
由于某种原因它不起作用。任何帮助,将不胜感激。
由于
凯尔
答案 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