tempvar
bashには、次のように作成された文字列変数があります。
tempvar=`grep -n 'Mesh Tally' ${meshtalfile}`
meshtalfile
は(大きな)入力ファイルであり、いくつかのヘッダー行といくつかのデータ行のブロックが含まれています。各ブロックは、上記のgrepで検索される開始行でマークされています。
手元の場合、変数tempvar
には次の文字列が含まれています。
5: Mesh Tally Number 4 977236: Mesh Tally Number 14 1954467: Mesh Tally Number 24 4354479: Mesh Tally Number 34
ここで、特にメッシュの集計番号に関連する行番号を抽出したいので、変数meshnum1をに等しいと定義し24
、次のsedコマンドを実行します。
echo ${tempvar} | sed -r "s/^.*([0-9][0-9]*):\sMesh\sTally\sNumber\s${meshnum1}.*$/\1/"
これは物事がうまくいかないところです。出力を期待します1954467
が、代わりに。を取得し7
ます。代わりに数値で試してみると、の代わり34
に戻ります。sedは数字の最後の桁だけを返しているようです-これは確かに欲張りマッチングの原則に違反していますか?そして奇妙なことに、開いた括弧を2、3文字残して移動すると、前に返していた1文字までの行全体が返されます。確かに、ある状況では貪欲になり、別の状況では反貪欲になることはできませんか?うまくいけば、私は構文で愚かなことをしたばかりです...9
4354479
(
.*