我正在尝试使用 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 的方式表现...