Regex 在终端中按开始和结束模式选择文本范围
给定一个开始和结束模式,我想选择该范围内的所有文本,包括与此模式匹配的新行 例如Regex 在终端中按开始和结束模式选择文本范围,regex,shell,awk,sed,terminal,Regex,Shell,Awk,Sed,Terminal,给定一个开始和结束模式,我想选择该范围内的所有文本,包括与此模式匹配的新行 例如 ➜ diskutil list /dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *251.0 GB disk0 1:
➜ diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *251.0 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage Macintosh HD 250.1 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Macintosh HD +249.8 GB disk1
Logical Volume on disk0s2
A200C898-46E7-4C85-B946-35677A6880C6
Unlocked Encrypted
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS m 999.3 GB disk2s2
3: Apple_Boot Recovery HD 650.0 MB disk2s3
我对选择外部驱动器及其所有条目感兴趣。我想的开始模式应该是/外部的,物理的/而结束模式可能应该是/^$|^\n$/
最终结果应该是
diskutil list | "magic"
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS m 999.3 GB disk2s2
3: Apple_Boot Recovery HD 650.0 MB disk2s3
使用地址范围:
diskutil list | sed '/(external, physical)/,/^$/!d;'
工作原理:
/外部,物理/,/^$/:从匹配外部,物理的行到下一个空行
!d:不要删除行
awk版本:awk'/start string/,/end string/'输入
如果要输出的范围不在文件末尾,请使用:
$ awk '/^\/dev\/disk/{f=0} /external, physical/{f=1} f' file
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS m 999.3 GB disk2s2
3: Apple_Boot Recovery HD 650.0 MB disk2s3
解释:
/^\/dev\/disk/ { f=0 } # flag down at new disk entry
/external, physical/ { f=1 } # flag up at desired start point
f # output when flag up
谢谢你,今天你让一些苹果用户非常高兴:请看我在2017年3月21日12:11的帖子上的回复
/^\/dev\/disk/ { f=0 } # flag down at new disk entry
/external, physical/ { f=1 } # flag up at desired start point
f # output when flag up