Shell:使用sed在两个字符串之间选择字符串

时间:2015-08-30 08:52:47

标签: linux sed grep

我有一个日志文件,格式如下:

pseudo=thierry33    pseudoConcat=thierry33
pseudo=i love you   pseudoConcat=i love you

我想返回pseudopseudoConcat之间的所有字符串,我想要的输出是:

thierry33
i love you

如何使用sed或awk执行此操作?我试了几天都是徒劳的。 感谢。

2 个答案:

答案 0 :(得分:1)

使用sed:

sed -r 's/pseudo=(.*[^ ]) +pseudoConcat.*/\1/'

说明:

  • 使用GNU选项-r允许+()没有反斜杠
  • 使用pseudo=
  • ()之后捕获字符串
  • 字符串应以非空格[^ ]
  • 结尾
  • 之前的空格和pseudoConcat +pseudoConcat
  • 使用第一个捕获的组\1作为替换

答案 1 :(得分:0)

使用GNU grep:

grep -oP '(?<=pseudo=).*?(?= *pseudoConcat)' file

没有尾随空格的输出:

thierry33
i love you

使用bash:

while read -r line; do [[ $line =~ pseudo=(.*?[^\ ])\ *pseudoConcat ]] && echo "${BASH_REMATCH[1]}"; done < file