2

構成ファイルのディレクティブを変更する必要があり、Linux で動作するようになりましたが、Solaris ではコマンドが文字化けしています。

ここにディレクティブがあります

    enable-cache            passwd          yes

はいをいいえに変更するだけです。Solaris、HPUX、および Linux で動作する sed を使用するにはどうすればよいですか?

Linux で動作する sed コマンドを次に示します。Solaris は -r を好まない

sed -r 's/^([[:space:]]*check-files[[:space:]]+passwd[[:space:]]+)yes([[:space:]]*)$/\1no\2/' inputfile

最終的な目標は、このコマンドをスクリプトに入れて、企業全体で実行することです。

ありがとう

グレッグ

また、昨日同様の投稿をしましたが、これは Linux では機能しましたが、他のものでは機能しませんでした。

4

3 に答える 3

2

Solaris には /usr/bin/sed と /usr/xpg4/bin/sed があります。これらはどれも -r オプションをサポートしていません。Linux の場合、このオプションは拡張正規表現を使用します。Solaris の sed には、正規表現をそのように設定するオプションがありません。より簡単な移植性が必要な場合は、他のツール、特に awk を使用できます。または、正規表現の 2 つのフレーバーを使用する必要があります。また、Solaris ボックスでのみ /usr/xpg4/bin/sed を指定する必要がある場合もあります。

#!/bin/bash
sun=`expr index Solaris $(uname -a)`
if [ $sun -ne 0 ] ; then
   /usr/xpg4/bin/sed [longer regex here ] 
else
  /usr/bin/sed -r [ extended regex here ]
fi 
于 2013-05-23T23:06:18.050 に答える
0

GNU[[:space:]]は通常、単に[ \t]. そして、括弧をエスケープする必要があります。また+、サポートされていません。したがって、これらの置換により、作業sedコマンドは次のようになります。

sed 's/^\([ \t]*check-files[ \t][ \t]*passwd[ \t][ \t]*\)yes\([ \t]*\)$/\1no\2/' inputfile

さらに注意:古いものにはインプレース変更を行うオプションがsed'sないため、最初にターゲットを一時ファイルにコピーして適用し、出力をターゲットにリダイレクトする必要がある場合があります。-ised

于 2013-06-27T02:18:50.653 に答える
0

これはより多くの文字に一致するため、厳密には同等ではありません:space:が、ファイルにはスペースとタブのみが必要であると想定しています。私は標準のシェルと sed コマンドのみを使用しているので、これは Solaris、Linux、および HP-UX で動作するはずです。

space=$(printf " \t")
sed 's/^\(['"$space"']*check-files['"$space"']+passwd['"$space"']+\)yes\(['"$space"']*\)$/\1no\2/' inputfile

check-filesスクリプトが期待どおりにサンプル ディレクティブと一致しないことに注意してくださいenable-cache

于 2013-05-23T23:05:57.390 に答える