Unix中替换行的Sed命令

Unix中替换行的Sed命令,sed,pattern-matching,ksh,aix,Sed,Pattern Matching,Ksh,Aix,我正在尝试调整脚本,使其在aix服务器中工作。脚本必须将包含模式的行替换为具有相同模式但添加更多信息的其他行。 以下是我先前的问题: 我想替换包含模式CASIOPEA\u STORE\u BDD\u PWD的行,这里是仍然不起作用的代码: sed -i 's/^.*\bCASIOPEA_STORE_BDD_PWD\b.*$/CASIOPEA_STORE_BDD_PWD='MyCasioPass2014#'/g' casiopeia.conf 现在,我正在OS X上尝试该脚本,该命令会向我抛出以

我正在尝试调整脚本,使其在aix服务器中工作。脚本必须将包含模式的行替换为具有相同模式但添加更多信息的其他行。 以下是我先前的问题:

我想替换包含模式
CASIOPEA\u STORE\u BDD\u PWD
的行,这里是仍然不起作用的代码:

sed -i 's/^.*\bCASIOPEA_STORE_BDD_PWD\b.*$/CASIOPEA_STORE_BDD_PWD='MyCasioPass2014#'/g' casiopeia.conf
现在,我正在OS X上尝试该脚本,该命令会向我抛出以下错误消息:

sed: 1: "File's route ...": invalid command code m

Q2:如果文件中不存在这一行,是否可以将其添加到文件
casiopeia.conf
中?

我认为sed的就地编辑(-I)标志在AIX上不起作用:

你可以试试:

sed "s/^.*\bCASIOPEA_STORE_BDD_PWD\b.*$/CASIOPEA_STORE_BDD_PWD=\'MyCasioPass2014\'/g" casiopeia.conf >casiopeia.edit
或者在AIX上安装sed的GNU版本

第二季度:

#!/bin/ksh

search="CASIOPEA_STORE_BDD_PWD"
replace="CASIOPEA_STORE_BDD_PWD=\'MyCasioPass2014\'"
filename="$1"

#Grep for search pattern
grep q "$search" "$filename"
if [ $? -ne -0 ]; then
    #Match not found, append line   
    echo "$search" >> "$filename"
else
    #Match found, create tmp file for inplace editing
    tmpfile=$(mktemp "/tmp/$filename.XXXXX")
    #Copy orignal to tmpfile
    cat $filename >$tmpfile
    #Sed line non-case sensitive
    sed "s/^.*$search.*$/$replace/g" "$tmpfile" >"$filename"
    #Remove temp file
    rm "$tmpfile"
fi    

您为什么有
“MyCasioPass2014”
?你真的想用单引号括起来吗?如果是这样,请尝试使用
sed“s/…\$/'…”/g.…
祝您好运。
\b
单词锚定可能无法移植。您可以尝试
\
我还认为-I选项是sed命令的GNU扩展,在AIX上不起作用。但在执行时不会抛出错误。我尝试删除b delimeter或更改“通过单个QUOUTE包围选项”,但也不起作用。是否有任何选项不仅可以替换标记为\b的单词并替换包含该模式的所有行?很遗憾,我无法访问AIX框,还可能是I(不区分大小写)是GNU sed标志。是否可以尝试使用
sed“s/^.*$search.*$/$replace/g”“$tmpfile”>“$filename”