有没有办法使用 sed 或 grep 来抓取两种模式之间的字符串?

有没有办法使用 sed 或 grep 来抓取两种模式之间的字符串?

我正在尝试为日志文件的每一行提取 2 个模式之间的字符串

例如

some_string: stuff_i_am_interested_in some_other_string
some_string: stuff_i_am_interested_in some_other_string
some_string: stuff_i_am_interested_in some_other_string
some_string: stuff_i_am_interested_in some_other_string

有办法得到吗stuff_i_am_interested_in

答案1

$ cut -d' ' -f2 file
stuff_i_am_interested_in
stuff_i_am_interested_in
stuff_i_am_interested_in
stuff_i_am_interested_in

如果这不是您所需要的全部,请编辑您的问题以澄清您的要求并提供更真正具有代表性的示例输入/输出。

答案2

grep

grep -Po 'some_string: \K.*(?= some_other_string)' file
grep -Po '(?<=some_string: ).*(?= some_other_string)' file

sed

sed -n 's/some_string: \(.*\) some_other_string/\1/p' file

如果some_string不在行首也不some_other_string在行尾,您可以执行以下操作:

sed -n 's/.*some_string: \(.*\) some_other_string.*/\1/p' file

答案3

你可以用 sed 来做到这一点:

cat logfile | sed -n -e 's/some_string: //p' | sed -n -e 's/ some_other_string//p'

相关内容