2017-04-13 18 views
0

特定のIDを持つHTMLタグ内の内容を変更する:私はタグに基づいてタグ内の内容だけを交換するsedを使用しに行くかどうUnixのは、sedの - 私は、次の内容のファイルを持っている

<h1 id="name">John Smith</h1> 
<h2 id="customer-id">192238</h2> 
<h3 id="current-date">Thu 13 Apr 2017</h3> 

をID?擬似コードで

  1. は、ID名
  2. foo
に開口部ブラケット <まで、すべてを置き換えた直後に閉じ括弧 >を探すファイル内のマッチングIDを探します

これは、sed

で行う必要があります。
+2

http://stackoverflow.com/a/ 1732454/19068 – Quentin

+0

期待される出力のサンプルを提供する方が良い –

+0

一般的なHTMLは正規表現で解析できません。 HTMLが自分のコントロール下にあるツールによって生成される場合にのみ、正規表現を使用することができます。入力フォーマットと期待される出力の両方を定義する必要があります。ユーザー@Quentinによるコメントを参照してください。 – AlexP

答えて

1

期待される出力を明確にする必要があります。 あなたはこのような何かをしたいかもしれません(sedのGNUで動作します):多分

sed -r "/id=\"$id\"/ s/^<.[^>]*>/<FOO>/" file1 
#Output of second line: 
<FOO>192238</h2> 

または::

cat <<EOF >file1 
<h1 id="name">John Smith</h1> 
<h2 id="customer-id">192238</h2> 
<h3 id="current-date">Thu 13 Apr 2017</h3> 
EOF 

id="customer-id" 
sed -r "/id=\"$id\"/ s/^<.[^>]*>/FOO/" file1 
#Output 
<h1 id="name">John Smith</h1>                                     
FOO192238</h2>                                         
<h3 id="current-date">Thu 13 Apr 2017</h3> 

それとも

sed -r "/id=\"$id\"/ s/(^<.*id=)[^>]*>/\1\"FOO\">/" <file1 
#Output of second line: 
<h2 id="FOO">192238</h2> 
+0

期待される_input_。一般的なHTMLは正規表現で解析できません。 HTMLが自分のコントロール下にあるツールによって生成される場合にのみ、正規表現を使用することができます。 – AlexP

+0

@AlexP特定の正規表現は、OPによって与えられたサンプル入力ファイルのために働くようです。ファイルがより複雑な場合、それらの解決策は正しく機能しない可能性があります。私は期待される入力ファイルを私の答えの冒頭に含めました。 –

+0

ありがとう、これは私がやったことに近いです。 'sed -i -e" s/customer-id。>。* <\ // customer-id \ "> $ customer_id <\/g"唯一の弱点は、 'id =" customer-id ">'は '>'の前の最後のものでなければなりませんが、私のユースケースでは問題ありません – Anurope

関連する問題