我正在编写一个脚本,我在这里编写包含-abc_1的行。 我需要提取出现在此字符串后面的字符串,如下所示:
option : -abc_1 <some_path>
我使用了以下代码:
grep "abc_1" | awk -F " " {print $4}
如果字符串之间使用了更多空格,则此代码失败,例如:
option : -abc_1 <some_path>
如果我能以某种方式提取路径而不打扰空间将会有所帮助。 感谢
答案 0 :(得分:2)
这应该做:
echo 'option : -abc_1 <some_path>' | awk '/abc_1/ {print $4}'
<some_path>
如果您未指定字段分隔符,则会使用一个或多个空白作为分隔符
PS你不需要grep
和awk
答案 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