我正在尝试格式化以下实际输出以使每个磁盘处于同一行
0. ct1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>
/pci@4,0/pci8086,347c@4/e,487c@0/disk@1
/dev/chassis/SYS/DBP/HDD0/NVME/disk
1. c2t1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>
/pci@4,0/pci8086,347d@5/apci108e,487c@0/disk@1
/dev/chassis/DBP/HDD1/NVME/disk
2. c3t0d0 <ATA-Min_5300_MAAAD-D3MU-223.57GB>
/pci@0,0/pci8e,4872@17/disk@0,0
/dev/chassis/MB/SSDR0/SSD0/disk
3. c4t2d0 <ATA-Min_5300_MTFD-D3MU-223.57GB>
/pci@0,0/pci08e,4872@17/disk@2,0
/dev/chassis/SYS/MB/SSDR0/SSD1/disk
Run Code Online (Sandbox Code Playgroud)
尝试获得如下所示的预期输出,
0. ct1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>| /pci@4,0/pci8086,347c@4/e,487c@0/disk@1| /dev/chassis/SYS/DBP/HDD0/NVME/disk|
1. c2t1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>| /pci@4,0/pci8086,347d@5/apci108e,487c@0/disk@1| /dev/chassis/DBP/HDD1/NVME/disk|
2. c3t0d0 <ATA-Min_5300_MAAAD-D3MU-223.57GB>| /pci@0,0/pci108e,4872@17/disk@0,0| /dev/chassis/MB/SSDR0/SSD0/disk|
3. c4t2d0 <ATA-Min_5300_MTFD-D3MU-223.57GB>| /pci@0,0/pci108e,4872@17/disk@2,0| /dev/chassis/SYS/MB/SSDR0/SSD1/disk|
Run Code Online (Sandbox Code Playgroud)
我在下面尝试过,
cat actual_output | tr -s " " | tr "\n" "|"
Run Code Online (Sandbox Code Playgroud)
这导致所有内容都在单行中,
0. ct1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>| /pci@4,0/pci8086,347c@4/e,487c@0/disk@1| /dev/chassis/SYS/DBP/HDD0/NVME/disk|1. c2t1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>| /pci@4,0/pci8086,347d@5/apci108e,487c@0/disk@1| /dev/chassis/DBP/HDD1/NVME/disk|2. c3t0d0 <ATA-Micron_5300_MAAAD-D3MU-223.57GB>| /pci@0,0/pci108e,4872@17/disk@0,0| /dev/chassis/MB/SSDR0/SSD0/disk|3. c4t2d0 <ATA-Micron_5300_MTFD-D3MU-223.57GB>| /pci@0,0/pci108e,4872@17/disk@2,0| /dev/chassis/SYS/MB/SSDR0/SSD1/disk|
Run Code Online (Sandbox Code Playgroud)
现在需要将 0. 直到下一个 1. 内容替换为换行符(\n),这样就会得到预期的结果。我们有任何正则表达式可以做同样的事情吗?
TIA
修改一个数据集只有 2 行:
$ cat disk.dat
0. ct1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>
/pci@4,0/pci8086,347c@4/e,487c@0/disk@1
/dev/chassis/SYS/DBP/HDD0/NVME/disk
1. c2t1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>
/pci@4,0/pci8086,347d@5/apci108e,487c@0/disk@1
/dev/chassis/DBP/HDD1/NVME/disk
2. c3t0d0 <ATA-Min_5300_MAAAD-D3MU-223.57GB>
/pci@0,0/pci8e,4872@17/disk@0,0
3. c4t2d0 <ATA-Min_5300_MTFD-D3MU-223.57GB>
/pci@0,0/pci08e,4872@17/disk@2,0
/dev/chassis/SYS/MB/SSDR0/SSD1/disk
Run Code Online (Sandbox Code Playgroud)
扩展OP的当前代码:
cat disk.dat | tr -s " " | tr "\n" "|" | sed -E "s/\|([0-9])/\|\n\1/g; s/$/\n/"
Run Code Online (Sandbox Code Playgroud)
在哪里:
sed将 a 放在\n竖线 ( |) 和数字 ( [0-9])之间sed添加了一个\n另一种awk想法:
awk -F'.' ' # input field delimiter is a period
{ sub(/[[:space:]]+/,"",$1) } # remove leading white space from 1st field
($1+0)==$1 { if (NR>1) print ""; pfx="" } # if 1st field is numeric; if beyond 1st row then terminate previous line of output; reset prefix to empty string
{ printf "%s%s|", pfx, $0; pfx=" " } # print prefix plus current line; reset prefix to a single space
END { if (NR>=1) print "" } # if we had at least one row of input then terminate previous line of output
' disk.dat
Run Code Online (Sandbox Code Playgroud)
这两者都会生成:
0. ct1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>| /pci@4,0/pci8086,347c@4/e,487c@0/disk@1| /dev/chassis/SYS/DBP/HDD0/NVME/disk|
1. c2t1d0 <INTEL-ADDPF2KX076T9S-2CV1-6.19TB>| /pci@4,0/pci8086,347d@5/apci108e,487c@0/disk@1| /dev/chassis/DBP/HDD1/NVME/disk|
2. c3t0d0 <ATA-Min_5300_MAAAD-D3MU-223.57GB>| /pci@0,0/pci8e,4872@17/disk@0,0|
3. c4t2d0 <ATA-Min_5300_MTFD-D3MU-223.57GB>| /pci@0,0/pci08e,4872@17/disk@2,0| /dev/chassis/SYS/MB/SSDR0/SSD1/disk|
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |