如何提取字符串出现在Shell中的一个特定字符串之后

时间:2014-04-20 19:00:56

标签: bash shell grep

我正在编写一个脚本,我在这里编写包含-abc_1的行。 我需要提取出现在此字符串后面的字符串,如下所示:

option : -abc_1 <some_path>

我使用了以下代码:

grep "abc_1" | awk -F " " {print $4}

如果字符串之间使用了更多空格,则此代码失败,例如:

   option :   -abc_1 <some_path>

如果我能以某种方式提取路径而不打扰空间将会有所帮助。 感谢

4 个答案:

答案 0 :(得分:2)

这应该做:

echo 'option :   -abc_1 <some_path>' | awk  '/abc_1/ {print $4}'
<some_path>

如果您未指定字段分隔符,则会使用一个或多个空白作为分隔符 PS你不需要grepawk

答案 1 :(得分:0)

使用sed,您可以一步完成搜索和过滤:

sed -n 's/^.*abc_1 *: *\([^ ]*\).*$/\1/p'

-n选项会禁止打印,但如果成功替换,则仍会打印最后的p命令。

答案 2 :(得分:0)

perl -lne ' print $1 if(/-abc_1 (.*)/)' your_file

经过测试的Here 或者如果你想使用awk:

awk '{for(i=1;i<=NF;i++)if($i="-abc_1")print $(i+1)}' your_file

答案 3 :(得分:0)

只尝试这种grep:

grep -Po '^option\s*:\s*-abc_1\s*\K.*' file

或者如果白色空间是固定的:

grep -Po '^option : -abc_1 \K.*' file