grep line和line into one line

时间:2017-01-17 16:58:37

标签: bash grep

我有包含大量信息的文本文件。我只想获得别名。 所有别名和端口信息都用空格分隔,每个端口用分号分隔。

此命令..

cat ~/Desktop/brocade_output.txt  |grep -A1 alias

给我这个输出。所有别名都以a_前缀开头。

>  alias:   a_computer_1    
        40:01:00:00:ab:00:00:aj; 60:01:00:0e:1e:d0:b5:fd
--
 alias: a_helpdesk  
        41:00:00:24:fh:5c:99:9e; 81:00:00:24:ff:5c:48:9f
--
 alias: a_library   
        91:00:00:24:fh:5c:99:9g; 91:00:00:24:ff:5c:48:9g
--

期望的输出

a_computer_1 40:01:00:00:ab:00:00:aj 60:01:00:0e:1e:d0:b5:fd
a_helpdesk 41:00:00:24:fh:5c:99:9e 81:00:00:24:ff:5c:48:9f
a_library 91:00:00:24:fh:5c:99:9g 91:00:00:24:ff:5c:48:9g

4 个答案:

答案 0 :(得分:4)

在awk中:

$ awk '/alias/ {f=$2;next} f{$1=$1; print f, $0; f=0 }' file
a_computer_1 40:01:00:00:ab:00:00:aj; 60:01:00:0e:1e:d0:b5:fd
a_helpdesk 41:00:00:24:fh:5c:99:9e; 81:00:00:24:ff:5c:48:9f
a_library 91:00:00:24:fh:5c:99:9g; 91:00:00:24:ff:5c:48:9g

说明:

    记录中/alias/ {f=$2;next}时{li> aliasf等于第二个字段
  • f{$1=$1; print f, $0; f=0 }设置f时,将其打印并显示"下一条记录"

答案 1 :(得分:0)

使用sed:

-i

添加 txtIDNum.TextChanging += txtIDNum_TextChanging; txtNameLT.TextChanging += txtNameLT_TextChanging; txtFamilyLT.TextChanging += txtFamilyLT_TextChanging; 标志以编辑文件。

答案 2 :(得分:0)

试试这个:

grep -A1 alias ~/Desktop/brocade_output.txt | cut -f2- -d":"

我的理解是你想要第一个:之后的行部分,所以使用:作为cut的分隔符并从2开始的所有字段应该做的伎俩

答案 3 :(得分:0)

这也可以在Perl中完成,还有一些字符:

perl -ane 'if (/alias/){$_=<>; s/^\s*//; print "$F[1] $_"}' file

使用这些命令行选项:
  - -n循环输入文件的每一行
  - -a autosplit模式 - 将输入行拆分为@F数组   - -e执行perl代码

/alias/与当前行匹配 $F[1]@F中的第二个元素 $_=<>$_默认变量分配给输入文件中的下一行 s/^\s*//$_

中删除前导空格