Linux 仅列出每个基本频道的Red Hat卫星子频道

Linux 仅列出每个基本频道的Red Hat卫星子频道,linux,bash,Linux,Bash,我正在编写bash脚本来将频道从一个卫星复制到另一个卫星 我只想获取基本频道的子频道列表: clone-rhel-x86_64-server 我特意使用grep-E-A10来给出 最多10个子频道 现在我得到: rhn-satellite-exporter --list-channels |grep -E -A10 '(^| )clone-rhel-x86_64-server( |$)'|grep -v "^B" C child_channel1 C child_cha

我正在编写bash脚本来将频道从一个卫星复制到另一个卫星

我只想获取基本频道的子频道列表: clone-rhel-x86_64-server

我特意使用grep-E-A10来给出 最多10个子频道

现在我得到:

rhn-satellite-exporter --list-channels |grep -E -A10 '(^| )clone-rhel-x86_64-server( |$)'|grep  -v "^B"
C       child_channel1
C       child_channel2
C       child_channel3

C       child_channel4
C       child_channel5
C       child_channel7
我的目的是只获取第一部分,即仅获取子频道

对于基本通道:clone-rhel-x86_64-server

rhn-satellite-exporter --list-channels |grep -E -A10 '(^| )clone-rhel-x86_64-server( |$)'|grep  -v "^B"
C       child_channel1
C       child_channel2
C       child_channel3

如何实现这一点?

实现这一点的一种方法是使用
perl
的段落模式。从
人力资源

   -0[octal/hexadecimal]
        specifies the input record separator ($/) as an octal or
        hexadecimal number. [. . .]
        The special value 00 will cause Perl to slurp files in paragraph
        mode.  [. . .]
在段落模式中,“行”由
\n\n
定义,而不是单独定义
\n
,因此每个“行”实际上是一个段落。因此,您可以使用Perl one liner并告诉它打印第一行并退出:

rhn-satellite-exporter --list-channels |
    grep -E -A10 '(^| )clone-rhel-x86_64-server( |$)'| grep  -v "^B" |
        perl -00ne 'print;exit'
请注意,上面也将打印空行,因为这被视为段落的一部分。为了避免这种情况,您可以将其解析出来:

 rhn-satellite-exporter --list-channels |
    grep -E -A10 '(^| )clone-rhel-x86_64-server( |$)'| grep  -v "^B" |
        perl -00ne 'print;exit' | grep .
或者在Perl脚本本身中删除它:

 rhn-satellite-exporter --list-channels |
    grep -E -A10 '(^| )clone-rhel-x86_64-server( |$)'| grep  -v "^B" |
        perl -00ne 's/\n\s*\n/\n/;print;exit' | grep .

我投票结束这个问题,因为它最适合Unix和Linux SE!虽然这个问题适用于Unix和Linux,但它是一个bash问题,所以这里也讨论这个问题。
child_通道{1,2,3}
child_通道{4,5,7}
的区别是什么?是否存在使它们彼此不同或是它们之间的空白行,分隔符,并且您希望在空白行上方但不在下面的那些通道上?嗨,伊坦,您正确地理解我,子信道{1,2,3}属于所需的基本信道,所以我希望在空白行上方打印子信道,而不是那些空白的LeSeNANK下你的答案,但实际上我得到了同样的结果:RHN卫星出口商——列表频道:GRIP-E-A10’(^ ^)克隆克隆RHEL-X86Y64-Server($$)'GRIP-V“^ B”Perl -0Ne的打印;退出'C child_channel1 C child_channel2 C child_channel3 C child_channel4 C child_channel5 C child_channel7,我已经尝试了所有选项。@Max_il在什么操作系统上?嗨,terdon,操作系统是:Red Hat Enterprise Linux Server 6.6版