我有一条线叫
10909101 - testingName - Log8767, File787 - 8:50PM
现在我只想使用 grep 来获取testingName
我的输出。
第一个数字的位数可能会有所不同(另一行可能将12
其自身作为第一个数字),因此我无法使用任何基于数字的 grep。那么我该如何解决这个问题呢?
答案1
鉴于所有数据的格式都相同,grep
因此这是错误的工具。当然,它是可用的,但使用它是一件麻烦事——这不是grep
设计的目的,更好的工具是awk
。
由于您的分隔符始终是“空格,破折号,空格”序列,即-
,您可以这样做:
$ awk -F' - ' '{print $2}' <filename>
其中<filename>
是包含您正在搜索的数据的文件的名称,您将获得整个文件中的所有行,这些行被修剪为仅第二个条目。如果您不喜欢使用三个字符分隔符,您可以这样做:
$ awk -F- '{print $2}' | tr -d ' '
它只是抓取从第一个-
到第二个的所有内容,包括空格,并通过 删除空格tr
。当然,如果您的文件名中有空格,这会导致问题,您将需要坚持第一个示例。
答案2
这使用二的实例grep
,但它是纯的grep
:
echo '10909101 - testingName - Log8767, File787 - 8:50PM ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'
输出:
testingName