3

Solarisマシン(SunOSsu1a 5.10 Generic_142900-15 sun 4vsparcSUNW、Netra-T2000)を持っています。

次のsed構文は、各行からすべての先頭と末尾の空白を削除します(アプリケーションの問題が発生するため、空白を削除する必要があります)。

        sed 's/^[ \t]*//;s/[ \t]*$//' orig_file > new_file

しかし、sedは各行の終わりから「t」文字も削除することに気づきました。

各行から先頭と末尾の空白のみを削除するために、sed構文/コマンドを修正する方法をアドバイスしてください(解決策はPerlまたはAWKでも可能です)。

例(最後の文字列を見てください--set_host)

1)

sedコマンドを実行する前の元の行

   pack/configuration/param[14]/action:set_host

別の例(sedを実行する前)

   +/etc/cp/config/Network-Configuration/Network-Configuration.xml:/cp-pack/configuration/param[8]/action:set_host

2)

sedコマンドを実行した後の行

   pack/configuration/param[14]/action:set_hos

別の例(sedを実行した後)

   +/etc/cp/config/Network-Configuration/Network-Configuration.xml:/cp-pack/configuration/param[8]/action:set_hos
4

2 に答える 2

5

私が思いついたのは、キャラクタークラスを使用できることです。

sed 's/^[[:space:]]*//;s/[[:space:]]*$//'

これは、(明らかに)posixがスペース、、、またはを解釈するためsed、オプションを使用してgnusedで発生します。の代わりにリテラルタブを配置することでこれを修正できます。最も簡単な方法はおそらく+です。それでも問題が解決しない場合は、パターンをファイル(リテラルタブ付き)に入れて、を使用します。--posix[ \t]\t\tCtrlV Tabsed -f patterns.sed oldfile > newfile

于 2012-05-16T15:48:26.780 に答える
0

@aixが指摘したように、問題は間違いなくあなたsedが理解していないこと\tです。GNUsedはそうしますが、多くの適切なUnixフレーバーはそうではありません。HP-UXはその1つであり、Solarisもそうだと思います。GNUをインストールできない場合はsed、Perlを検討します。

perl -pi.old -e 's{^\s+}{};s{\s+$}{}' file

... 1つ以上の先頭の空白(^ \ s +)[スペースおよび/またはタブ]と末尾の空白(\ s + $)を削除し、ファイルをその場で更新して、バックアップコピーを「file.old」として残します。

于 2012-05-16T16:37:58.080 に答える