3

以下に示すようなテンプレートを含む入力ファイルがあります。バージョンを変更したい:sedを使用します。

    Package: somename
    Priority: extra
    Section: checkinstall
    Maintainer: joe@example.com
    Architecture: i386
    Version: 3.1.0.2-1
    Depends:
    Provides: somename
    Description: some description

現在、を使用して現在のバージョンを取得しており、現在のバージョンをgrep -m 1 Version inputfile | sed 's/[:_#a-zA-Z\s"]*//g'次のように置き換えようとしています。sed 's/3.1.0.2-1/3.1.0.2/' inputfile

ただし、これは機能していないようですが、echoを使用してコマンドラインで試してみると機能します。 echo 'Version: 3.0.9.1' | sed 's/3.0.9.1/3.2.9.2/'

Output: Version: 3.2.9.2

私がこれをどのように達成できるかについての助けをいただければ幸いです。できれば、ファイルに現在のバージョンを取得せずにバージョンを変更したいと思います。

前もって感謝します

4

4 に答える 4

10

grepは必要ありません。

sed -i '/Version/s/3\.1\.0\.2-1/3.1.0.2/' <files>
于 2012-06-06T19:48:36.703 に答える
8

「-i」スイッチを使用して、「ファイルの編集[I]n場所」のsedを実行します。

sedのmanページを参照してください:http://unixhelp.ed.ac.uk/CGI/man-cgi ?sed

于 2012-06-06T18:39:31.190 に答える
4

名前sedは文字通り「StreamEDitor」に由来します-あなたが見ている振る舞いはそれが設計された方法です。あなたが言う時:

sed 'some commands' file

ファイルを読み取り、コマンドを実行して結果を出力します。ファイルに保存しません(ただし、一部のバージョンにsedは、そのように指示するオプションがいくつかあります)。あなたはおそらくこれをしたいでしょう:

sed 'some commands' file > newfile

newfile次に、それが正しいことを確認してから、 mv newfile file。編集スクリプトが正しいことを絶対に確信していて、正しくない場合に間違ったデータでファイルを上書きした結果に対処できる場合は、インプレース編集フラグの使用を検討できますが、通常は保存する方が安全です。テスト/検証できるように一時ファイルに追加します。

于 2012-06-06T18:26:53.793 に答える
2

タイプミスがあります。最後のドットはダッシュである必要があります。これを試してください。

sed 's/3.1.0.2-1/3.1.0.2-2/'
于 2012-06-06T18:06:12.940 に答える