有条件地添加或附加到Linux脚本中的文件



我需要通过脚本修改文件。
我需要做以下操作:
如果不存在特定的字符串,则将其附加。

所以我创建了以下脚本:

#!/bin/bash  
if grep -q "SomeParameter A" "./theFile"; then  
echo exist  
else  
   echo doesNOTexist  
   echo "# Adding parameter" >> ./theFile    
   echo "SomeParameter A" >> ./theFile    
fi

这有效,但我需要进行一些改进。
我认为如果我检查"某个参数"是否存在,然后查看其后面是" A"或" B",那会更好。如果是" b",则将其制作为"。
否则附加字符串(就像我一样),但在最后一个注释开始之前。
我该怎么办?
我的脚本不好。
谢谢!

首先,如果已经存在任何SomeParameter行。这应该与诸如SomeParameterSomeParameter B之类的行一起使用,并在多余的空间中使用:

sed -i -e 's/^ *SomeParameter( +B)? *$/SomeParameter A/' "./theFile"

如果不存在,则添加行:

if ! grep -qe "^SomeParameter A$" "./theFile"; then
    echo "# Adding parameter" >> ./theFile    
    echo "SomeParameter A" >> ./theFile    
fi
awk 'BEGIN{FLAG=0}
     /parameter a/{FLAG=1}
     END{if(flag==0){for(i=1;i<=NR;i++){print}print "adding parameter#nparameter A#"}}' your_file

BEGIN{FLAG=0}-在文件处理开始之前,启动标志变量。

/parameter a/{FLAG=1}-如果在文件中找到参数,请设置标志。

END{if(flag==0){for(i=1;i<=NR;i++){print}print "adding parameter#nparameter A#"}}-在文件末尾添加行

perl单线

perl -i.BAK -pe 'if(/^SomeParameter/){s/B$/A/;$done=1}END{if(!$done){print"SomeParameter An"}} theFile

将创建一个备份thefile.bak(-i选项)。要测试的更详细的版本,该版本考虑了最后的评论。应保存在文本文件中并执行perl my_script.plchmod u+x my_script.pl ./my_script.pl

#!/usr/bin/perl
use strict;
use warnings;
my $done = 0;
my $lastBeforeComment;
my @content = ();
open my $f, "<", "theFile" or die "can't open for readingn$!";
while (<$f>) {
  my $line = $_;
  if ($line =~ /^SomeParameter/) {
    $line =~ s/B$/A/;
    $done = 1;
  }
  if ($line !~ /^#/) {
    $lastBeforeComment = $.
  }
  push @content, $line;
}
close $f;
open $f, ">", "theFile.tmp" or die "can't open for writtingn$!";
if (!$done) {
  print $f @content[0..$lastBeforeComment-1],"SomeParameter An",@content[$lastBeforeComment..$#content];
} else {
  print $f @content;
}
close $f;

一旦可以,请添加以下内容:

rename "theFile.tmp", "theFile"

相关内容

  • 没有找到相关文章

最新更新