![awk 在两个特定字符串之间读取并丢弃其余部分](https://linux22.com/image/38397/awk%20%E5%9C%A8%E4%B8%A4%E4%B8%AA%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B9%8B%E9%97%B4%E8%AF%BB%E5%8F%96%E5%B9%B6%E4%B8%A2%E5%BC%83%E5%85%B6%E4%BD%99%E9%83%A8%E5%88%86.png)
我过去awk
只读取两个字符串“Check”和“Result”之间的文本。我已经使用了在互联网上找到的许多变体,但仍然无法获得理想的结果。我试过了:
awk "/Check:/,/Result:/ {print}" BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | more
我也尝试过:
sed -n "/Check:/,/Result:/p" BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | more
但仍然没有得到我想要的。每次我得到它,这就是我得到的:
ata> <data fieldName="Timepoint ID" value="B01 SCREENING"/> <data fieldName="SQCSummary" value=" Nothing Submission Quality and Compliance Report - 201
4-06-03T14:30:00.547-07:00Check: Ensure slice thickness is between 2mm and 5mmResult: FailReason: Image(s) found with slice thickness out of range. Instanc
e 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.369 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.139541
7628.479.368 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.367 found with slice thickness out
of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.366 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.
55.3.4094358250.93.1395417628.479.365 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.364 found
with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.363 found with slice thickness out of range : 1.25 I
nstance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.362 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.
1395417628.479.361 found with slice thickness out of range : 1.25 Instance 1.2.840.113619.2.55.3.4094358250.93.1395417628.479.360 found with slice thicknes
有人还有其他建议吗?
答案1
和perl
:
perl -l -0777 -ne 'print for /Check: (.*?)Result:/gs' < file
对于 GNU grep
,(几乎)等价的是:
grep -zPo '(?s)Check: \K.*?(?=Result:)' < file
或者与pcregrep
:
pcregrep -Mo1 '(?s)Check: (.*?)Result:' < file
输出:
Ensure Modality is the same for all images in a DICOM series.
Ensure SeriesDate is in the proper DICOM format (YYYYMMDD) for all images.
[...]
答案2
我对你的问题的解决方案:
使用grep
bash 字符串操作如下:
RES="$(cat BMSCA209-040-transfer-report.18-Jun-2014.11:18.csv.tmp | egrep -o 'Check.*Result')"
RES=${RES%Result}
RES=${RES#Check: }
echo $RES
就是这样 :)
结果是:
Ensure slice thickness is between 2mm and 5mm