在bash中用新行替换逗号时添加以前的文本

时间:2018-07-24 18:24:15

标签: bash

我有以下输出:

[matt@gateway output]# cat test2.txt
TM1ITP1-TMNLSTP1 SLC00=0,SLC01=0,SLC02=0,SLC03=0

如果我只是使用

cat test2.txt | tr "," "\n"

我最终会非常接近要达到的目标:

TM1ITP1-TMNLSTP1 SLC00=0
SLC01=0
SLC02=0
SLC03=0

但是在用新行替换逗号之后,如何最终在所有新行中添加术语“ TM1ITP1-TMNLSTP1”?

TM1ITP1-TMNLSTP1 SLC00=0
TM1ITP1-TMNLSTP1 SLC01=0
TM1ITP1-TMNLSTP1 SLC02=0
TM1ITP1-TMNLSTP1 SLC03=0

我仍然需要使用tr还是可以尝试的其他方法?

3 个答案:

答案 0 :(得分:1)

我只使用Perl:

cat test2.txt | perl -pe 's/,/\nTM1ITP1-TMNLSTP1/g'

如果TM1ITP1-TMNLSTP1部分应该是动态的,它将变得更加复杂。假设它始终是您要在其余(逗号分隔)项目中重复的行上非空白字符的第一个非空序列。然后我会去:

perl -pe 's/,/\n$prefix/g if ($prefix) = /(\S+)/'

或者,如果您始终有两列(用空格分隔),而只有第二列包含逗号,则也可以这样:

perl -lane 'print map { "$F[0] $_\n" } split /,/, $F[1]'

-a选项自动将字段拆分为@F数组,因此$F[0]是前缀,$F[1]是逗号分隔的列表。)

答案 1 :(得分:0)

awk来营救!

$ awk '{n=split($2,a,","); for(i=1;i<=n;i++) print $1,a[i]}' file

TM1ITP1-TMNLSTP1 SLC00=0
TM1ITP1-TMNLSTP1 SLC01=0
TM1ITP1-TMNLSTP1 SLC02=0
TM1ITP1-TMNLSTP1 SLC03=0

答案 2 :(得分:0)

sed很简单。

 <form>
    {% for key, value in result.items() %}
       {% for k1,v1 in value.items() %}

    <br>
    {{v1}}:<br>
     <input type="text" name={{k1}} value={{v1}} size = "50" ><br>


    {% endfor %}
    {% endfor %}

...您曾经在Google上搜索过,不是吗? XD