我需要通过脚本修改文件。
我需要做以下操作:
如果不存在特定的字符串,则将其附加。
所以我创建了以下脚本:
#!/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
行。这应该与诸如SomeParameter
或SomeParameter 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.pl
或chmod 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"