如何附加其中包含变量的字符串?
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";
}