1

sedあるファイル( temp.txt(バージョン番号))で文字列を検索し、この文字列を取得して別のファイルのバージョン番号を更新するために使用するスクリプトを作成しています。関連するコードスニペットは次のとおりです。

new=$(sed -n '/version: /p' temp.txt)  
sed -i .bk "s/version: [.0-9]*/version: $new/" file2.txt

私が抱えている問題は、変数newがバージョン番号を含む1行だけを取得するのではなく、ファイル全体、file2.txtを取得することです。これにより-n、コマンドの一部が機能していないと思います。これにより、文字列を含むすべての行の印刷が抑制されるはずversionです。

sedこれは、私が使用しているバージョン(Mac上)で問題になる可能性があると思います。sedまたは、コマンドを間違って使用している可能性があります。どんな助けでもいただければ幸いです。

sedこのスクリプトはコンピュータ上で実行されるだけではないため、バージョンを更新したくありません。したがって、どのような回避策も理想的です。

ありがとう

4

1 に答える 1

0

あなたtemp.txtは次のように見えると思います:

# some text
version: 3.14
# more text

そして、あなたのfile2.txtような。"version:" は 1 つだけ存在します。

その場合は、次のスクリプトを使用できます。

#!/bin/bash
new=$(cat temp.txt | grep version: | sed "s/ //g" | cut -d ":" -f 2)
sed -i "bk" -E "s/version:.*/version: ${new}/" file2.txt

最初のコマンドは、バージョンが書かれている行を見つけます。sed余分なスペースを削除しcut、バージョン番号を抽出するために使用しています。このコマンドのバージョン番号は、たとえば「3.6.7a」の場合もあります。

2 番目のコマンドでは、古いバージョンが記述されている行を置き換えています。「version:」文字列の背後にあるものは気にしないことに注意してください。これは、新しいバージョン番号に置き換えるためです。また、 のバックアップを に保存しfile2.txtていfile2.txt.bkます。

于 2014-11-24T01:55:47.910 に答える