如何附加到脚本中的变量字符串?

如何附加到脚本中的变量字符串?

如何附加其中包含变量的字符串?

sed 's/MIMG109AL1ARP\t[[:alnum:]]*\t/ /g'

我最初想sed,但我不想替换任何东西,我想在初始行之后添加一些东西。

一些示例字符串如下:

MIMG109AL1ARP     PQHDO0542I7537

MIMG109AL1ARP     PQHDO0372I2435

MIMG109AL1LLL     QRHDO0382I2342

MIMG109AL1LLL     PQHDO362I2345

不过我希望它们看起来像这样:

MIMG109AL1ARP     PQHDO0542I7537     appendagehere

MIMG109AL1ARP     PQHDO0372I2435     appendagehere

MIMG109AL1LLL     QRHDO0382I2342     appendage2here

MIMG109AL1LLL     PQHDO362I2345      appendage2here

刚刚编辑了文件以使我的问题更清楚!我需要分别附加单独的行,而不是每一行。感谢您迄今为止的投入。任何帮助或重定向表示赞赏!

答案1

在 sed 中,$代表行尾。所以你可以说

sed -e 's/$/\twhatever/'

如果您只想追加到非空行,但将空行保留为空,请使用以下命令(其中&sed 中是匹配的字符串,在本例中为一个字符):

sed -e 's/.$/&\twhatever/'

或者您也可以仅在非空行上进行替换:

sed -e '/./s/$/\twhatever/'

答案2

在我一位朋友的帮助下,我能够使用这条线让它工作!

sed 's/\(MIMG109AL1ARP..*\)\($\)/\1\twhatIwant\2/g'

解决方案是将表达式分解为两个子表达式。我没有改变我已有的内容,而是能够在两个子表达式之间添加我想要的内容。

感谢你们发帖并试图帮助我。

答案3

只需要处理 9 种不同的模式和附件,请尝试如下操作:

#! /usr/bin/perl

use strict;

my %append = ( # matchregex       => appendstring
               qr/^MIMG109AL1ARP/ => 'appendagehere',
               qr/^MIMG109AL1LLL/ => 'appendage2here',
               # more here
             );

while (<>) {
   chomp;
   foreach my $re (keys %append) {
       if (m/$re/) {
           s/$/\t$append{$re}/;
           last;
       }
   }
   print $_, "\n";
}

相关内容