xargs文字列を置換の中のsed置換に置き換えようとしていますが、ここでは動作しないコードがあります。xargs sedとbashのコマンド置換
CALCINT=$CALCINT$(seq $CALCLINES | xargs -Iz echo $CALCINT' -F "invoiceid'z'="'$(sed -n '/invoiceid'z'/s/.*name="invoiceid'z'"\s\+value="\([^"]\+\).*/\1/p' output.txt))
2回目の置換でsedまではすべて動作します。 'z'は$ CALCLINES変数に基づいて1〜20の数字でなければなりません。私はそれがsedのために適切にエスケープしないことと関係があることを知っていますが、私はsedがこのような状況で物事を逃れたいと思っているかのように私の頭を包み込むのに問題があります。
ここでは、コードの周囲の行です:
curl -b mycookiefile -c mycookiefile http://localhost/calcint.php > output.txt
CALCLINES=`grep -o 'class="addinterest"' output.txt | wc -l`
CALCINT=$CALCINT$(seq $CALCLINES | xargs -Iz echo $CALCINT' -F "invoiceid'z'="'$(sed -n '/invoiceid17/s/.*name="invoiceid17"\s\+value="\([^"]\+\).*/\1/p' output.txt))
echo $CALCINT
出力:(私は今、何を得る)
-F "invoiceid1=" -F "invoiceid2=" -F "invoiceid3=" -F "invoiceid4=" -F "invoiceid5=" -F "invoiceid6=" -F "invoiceid7=" -F "invoiceid8=" -F "invoiceid9=" -F "invoiceid10=" -F "invoiceid11=" -F "invoiceid12=" -F "invoiceid13=" -F "invoiceid14=" -F "invoiceid15=" -F "invoiceid16=" -F "invoiceid17=" -F "invoiceid18=" -F "invoiceid19=" -F "invoiceid20="
私は出力がこの
のようなものであると確認するために望んでいる何が-F "invoiceid1=2342" -F "invoiceid2=456456" -F "invoiceid3=78987" ...etc etc
------------------------- EDIT --------------------- -
FWIW ...ここでは、私が試したoutput.txtと他のことがあります。何
が含まれていませんoutput2.txt
for i in $(seq -f "%02g" ${CALCLINES});do
sed -n "/interest$i/s/.*name=\"interest$i\"\s\+value=\"\([^\"]\+\).*/\1/p" output.txt > output2.txt
done
物事をクリアするが、ステップを取るため@janos応答のおかげでここに戻って、問題の根本は、私が取得するために苦労してるということであると私にはそれが明確になります請求書の払い出しダイナミックに生成されたHTML ".... =" invoiceid7 "value =" 556 "..."ですので、私がgrepできる特定のタグには一貫性がありません。一貫して変数sedを使って基本的にタグ名を推測してから値を抽出しようとします。ループにsedの
Annd..output.txt https://pastebin.com/ewUaddVi
------ UPDATE ----- 作業溶液
スタッフ。 sed文字列に変数を使用するためにはどのように使用しなければならなかったかに注意してください。それはここの他の場所によく書かれています。 :)
for i in $(seq ${CALCLINES});do
e="interest"$i`
CALCINT=$CALCINT' -F "'$e'='
CALCINT=$CALCINT$(sed -n '/'$e'/s/.*name="'$e'"\s\+value="\([^"]\+\).*/\1/p' output.txt)'"'
done
下記の解決策に関するコメントを読んでください。これを行うにはよりクリーンな方法があります。
... | xargs -Iz echo -F "invoiceid'z'="$(sed ...)"
問題は$(sed ...)
がxargs
の実行中に入力の各行に対して評価されないことである。
は理にかなって、それを手に入れたが、私はルートを推測しますここでの問題は、私が請求書IDを取得するのに苦労していることです。ダイナミックに生成されたHTML ".... =" invoiceid7 "value =" 556 "..."ですので、私がgrepできる特定のタグには一貫性がありません。一貫して変数sedを使って基本的にタグ名を推測してから値を抽出しようとします。 – Blinder
@Blinder 'grep -o invoiceid '[0-9] *''はできませんか? – janos
はい、それは私の途中でしか得られません。また、毎回何個の要素があるのか分かりません。彼らがDBで仕事をするのはうれしいことですので、私はカールを使って関心を引き上げるために請求書IDのリストを渡すことができましたが、それはすべてクライアントサイドで行われていますので、HTMLを切り捨てる必要があります。最後に私はこのようなループの中でsedを十分に幸せにすることができました: for $(seq $ {CALCLINES}); e = "interest" $ i CALCINT = $ CALCINT '-F "' $ '=' '$ e' = 'CALCINT = $ CALCINT $(sed -n'/'$ e'/s /.* name = "'$ e'" \ s \ + value = "\([^"] \ + \) 。*/\ 1/p 'output.txt)' "'' done – Blinder