![如何使用 sed 打印包含哈希值的字符串的一部分(或任何替代解决方案)?](https://linux22.com/image/94798/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sed%20%E6%89%93%E5%8D%B0%E5%8C%85%E5%90%AB%E5%93%88%E5%B8%8C%E5%80%BC%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%88%E6%88%96%E4%BB%BB%E4%BD%95%E6%9B%BF%E4%BB%A3%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%89%EF%BC%9F.png)
我正在尝试使用 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
支持-o
or--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 的方式表现...