我有一个文件,其中包含类似于下面的一行:
call mvn liquibase:updateSQL -P profileName -Dusername=username -Dpassword=password -Dvarchar=nvarchar -Dnumber=numeric -Dchar=nchar -Ddate=datetime
我想做的是提取profileName
,我该如何提取"-P"之后的所有内容,然后提取第 n 次出现"-D"之前的所有内容?
我将在不同的文件上运行它,并且配置文件名称可能与上面的位置不同。
我希望得到的预期输出是:profileName
谢谢!
告诉我这是否会按预期完成工作:
grep -oP '(?<=-P )w+(?= )' file_to_parse
这种模式说你想要在"-P"之后和"之前"的单词
使用 awk:
$ awk 'BEGIN{RS=" "} /^-D/{c++} f&&c<1{b=b $0 OFS} /^-P/{f=1} END{print b}' file
profileName
用f&&c<1{b=b $0 OFS}
中的c<n
控制所需的-D
量。