在第n次出现字符串之前获取所有内容

时间:2017-05-24 08:55:26

标签: bash

我的文件包含与下面类似的行:

["isp_hidden_value"]=> array(9) { ["comcast"]=> string(7) "comcast" ["yahoo"]=> string(5) "yahoo" ["gmail"]=> string(5) "gmail" ["roadrunner"]=> string(10) "roadrunner" ["verizon"]=> string(7) "verizon" ["att"]=> string(3) "att" ["hotmail"]=> string(7) "hotmail" ["aol"]=> string(3) "aol" ["juno"]=> string(4) "juno" } } 

我想要做的是提取call mvn liquibase:updateSQL -P profileName -Dusername=username -Dpassword=password -Dvarchar=nvarchar -Dnumber=numeric -Dchar=nchar -Ddate=datetime ,如何在' -P'之后提取所有内容,然后在第n次出现之前提取所有内容。 -D'?

我将在不同的文件上运行它,并且profileName可能与上面的文件位于不同的位置。

我希望获得的预期输出是:profileName

谢谢!

2 个答案:

答案 0 :(得分:0)

使用awk:

$ awk 'BEGIN{RS=" "} /^-D/{c++} f&&c<1{b=b $0 OFS} /^-P/{f=1} END{print b}' file
profileName

使用-D中的c<n控制所需f&&c<1{b=b $0 OFS}的数量。

答案 1 :(得分:0)

告诉我这是否能按预期完成工作:

grep -oP '(?<=-P )\w+(?= )' file_to_parse

这种模式表示你想要&#34 ;-P&#34;之前&#34; &#34;