如何使用 sed 打印包含哈希值的字符串的一部分(或任何替代解决方案)?

如何使用 sed 打印包含哈希值的字符串的一部分(或任何替代解决方案)?

我正在尝试使用 sed 打印出一行中的特定字符串。

第一个问题是我在查找包含斜杠的字符串时遇到一些困难,我已经尝试了其他线程中提供的一些解决方案但不成功,希望有人可以帮助我。

我有一个名为output.log 的文件。

一行的一个例子是:

013-11-08 19:45:52 evtlog.bad PROD/INSE/6004113 2012-11-08 19:04:06 /test11/golf/TierTwo/2013-11/evtlog.log

因此,使用 sed 我只想打印这一行的以下字符串:

/test11/golf/TierTwo/2013-11/evtlog.log

我想找到这一行中的字符串:“golf/TierTwo/2013-11”

所以我会使用例如:

sed 'golf/TierTwo/2013-11' output.log

并得到输出:

/test11/golf/TierTwo/2013-11/evtlog.log

我怎样才能实现这个目标?

如果有更好的解决方案代替 sed,也将受到欢迎。我的目标是在脚本中使用它,bash 或 perl

答案1

使用awk而不是 sed:

awk 'index($0,"golf/TierTwo/2013-11")>0 { print $7 }' output.log

这将搜索每一行中的字符串,如果找到索引,将打印第 7 个单词。

答案2

如果您grep支持-oor--only-matching标志,您可以 grep 查找由任何连续的非空白字符包围的字符串

grep -o '[^[:blank:]]*golf/TierTwo/2013-11[^[:blank:]]*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log

或者(如果它支持 perl 风格的\S类)

grep -Eo '\S*golf/TierTwo/2013-11\S*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log

答案3

perl -naE 'say $F[6] if m!golf/TierTwo/2013-11!' logfile

perl -nae让 perl 以 awk 的方式表现...

相关内容