我有以下文字:
NodeMetaData MapNodeId =" 105141" PageFormat =" OsXml"唯一标识符=" fd0f9ade-88e1-4b04-b338-0a8884f66423" RelativePath =" Test_03 / AddressMap_MyAddressMap.os.xml" LastPulledRevision =" -9223372036854775808" LastPulledMd5 ="" LastSyncedMd5 =" 7D0C294B9A7C09F17FD5AC0414179DD414649455297B8F73125D7FB5E39D647D" HasMergeConflicts ="假" NodeMetaData MapNodeId =" 105142" Pag eFormat =" OsXml"唯一标识符=" 85f55c40-f95c-47f2-9c97-d35881e8f762" RelativePath =" Test_03 / Struct_MyStruct.os.xml" LastPulledRevision =" -922337203685477580 8" LastPulledMd5 ="" LastSyncedMd5 =" 32364BCCBCD8AA9C47D8E09A3EB06667DD9476EB155F9411FA359EFA5C1A4F4F" HasMergeConflicts ="假"
有两个MapNodeId(参见粗体),我只需要获取第一个并将其插入文件。 我使用了以下内容:
set WorkingCopyRI=`( sed -n 's/.*MapNodeId=\"// ; s/\" .*//p' Result.log)`
但是var包含两个MapNodeId的id,我需要添加什么才能获得第一个?
答案 0 :(得分:0)
您可以在脚本中附加;T;q
,以便在第一次打印第二条s
指令后退出。
这是一种更干净,更健壮的方式来完成整个事情:
sed -n '/MapNodeId=/ { s/^.*\sMapNodeId="\([^"]*\)"\s .*$/\1/p; q }'
我假设您的ID不包含双引号 - 如果可以,您将不得不修改组#1中的表达。
(另外,你的格式不能说明你的文字是否出现在多行中,但我假设MapNodeId="..."
部分出现在不同的行上,否则你就不会这样做了。有这个问题。)
答案 1 :(得分:0)
perl 方法:
My.List[!is.nan(My.List)]
输出:
perl -ne 'print "$1\n" if /MapNodeId="([^"]+)"/' Result.log
105141
- 打印第一个捕获的组值
或者如果你有 grep PCRE 支持:
print "$1\n"