2010-12-16 20 views
0

私はbashでhtmlテーブルを生成し、それを変数に格納し、html内の特定の領域を置き換える必要があります。bash sedでhtmlファイルを編集する

sed -r -i~ -e "s/(var filesystem=)(.*)/var filesystem=\"$filesystem_table\";/g" ./Html/xmon/xmon.html 

は基本的に私は、テーブルにDF -h bashの出力になって、私のページへのjavascriptの助けを借りて、それを挿入したいました。

すべての私の試みは

sed: -e expression #1, char 40: unterminated `s' command 

これを行うには簡単な方法はありません

を返しますか?

$ filesystem_tableの値は次のとおりです。(修正)

<tr> <td> Filesystem </td> <td> Size </td> <td> Used </td> <td> Avail </td> <td> Use% </td> <td> Mounted </td> </tr> <tr> <td> /dev/sda1 </td> <td> 94G </td> <td> 80G </td> <td> 9.3G </td> <td> 90% </td> <td>/</td> </tr> <tr> <td> none </td> <td> 2.0G </td> <td> 328K </td> <td> 2.0G </td> <td> 1% </td> <td> /dev </td> </tr> <tr> <td> none </td> <td> 2.0G </td> <td> 2.4M </td> <td> 2.0G </td> <td> 1% </td> <td> /dev/shm </td> </tr> <tr> <td> none </td> <td> 2.0G </td> <td> 372K </td> <td> 2.0G </td> <td> 1% </td> <td> /var/run </td> </tr> <tr> <td> none </td> <td> 2.0G </td> <td> 0 </td> <td> 2.0G </td> <td> 0% </td> <td> /var/lock </td> </tr> <tr> <td> /dev/sda3 </td> <td> 198G </td> <td> 184G </td> <td> 15G </td> <td> 93% </td> <td> /media/Zeta </td> </tr> <tr> <td> /dev/mmcblk0p1 </td> <td> 7.7G </td> <td> 477M </td> <td> 7.2G </td> <td> 7% </td> <td> /media/NIKON </td> </tr> 

を解決します! Ignacio Vazquez-Abramsのおかげです。

これは私がHTMLテーブルに 'DF -h' のoutpoutを変換する方法である:

df -h > /tmp/filesystem 
      echo "<table>" > /tmp/filesystem_table 
      cat /tmp/filesystem | while read line 
      do 
      echo "<tr>" >> /tmp/filesystem_table 
      echo "<td>" >> /tmp/filesystem_table 
      echo $line | awk '{ print $1; }' >> /tmp/filesystem_table 
      echo "</td>" >> /tmp/filesystem_table 
      echo "<td>" >> /tmp/filesystem_table 
      echo $line | awk '{ print $2; }' >> /tmp/filesystem_table 
      echo "</td>" >> /tmp/filesystem_table 
      echo "<td>" >> /tmp/filesystem_table 
      echo $line | awk '{ print $3; }' >> /tmp/filesystem_table 
      echo "</td>" >> /tmp/filesystem_table 
      echo "<td>" >> /tmp/filesystem_table 
      echo $line | awk '{ print $4; }' >> /tmp/filesystem_table 
      echo "</td>" >> /tmp/filesystem_table 
      echo "<td>" >> /tmp/filesystem_table 
      echo $line | awk '{ print $5; }' >> /tmp/filesystem_table 
      echo "</td>" >> /tmp/filesystem_table 
      echo "<td>" >> /tmp/filesystem_table 
      echo $line | awk '{ print $6; }' >> /tmp/filesystem_table 
      echo "</td>" >> /tmp/filesystem_table 
      echo "</tr>" >> /tmp/filesystem_table 
      done  
      echo "</table>" >> /tmp/filesystem_table 

      filesystem_table="$($_CMD cat /tmp/filesystem_table)" 
      filesystem_table="$($_CMD echo $filesystem_table)" 


      sed -r -i~ -e "s!(var filesystem=)(.*)!var filesystem=\"$filesystem_table\";!g" ./Html/xmon/xmon.html 
+1

'$ filesystem_table'の値は何ですか?変数であることを意味していない場合は、1つの石で2つの鳥を殺す:外側の二重引用符を一重引用符に変更し、内側の二重引用符をエスケープする必要はありません。 – Cascabel

+1

「<\td>」?本当に? –

+0

私の悪い - 私はそれらをすべてエスケープする必要があり、実際に動作するためにJavaScriptでエスケープする必要があると思いますか? –

答えて

1

あなたのENV varに/を持っています。別の区切り文字を使用します。

s!foo!bar!g 
+0

デリミタを変更しようとしました: sed -r -i〜-e "s!(var * xmon.htmlはまだ問題があるようです。 –

0

多くの繰り返しを削除するには、出力ファイルを1回だけ指定します。

while ... 
do 
    ... 
done >> /tmp/filesystem_table 

最初の一時ファイルはまったく必要ないかもしれません。 AWKの1つの呼び出しはそれをすべて行うことができたときに、すべてのものをechoawkコマンドを使用する理由

{ 
echo "<table>" 
df -h | while read line 
     do 
      echo "<tr>" 
      ... 
     done 
} > /tmp/filesystem_table 

df -h | awk 'BEGIN { OFS = "\n</td>\n<td>\n"; 
        print "<table>" } 

      NR == 1 { ORS = "\n</td>\n</tr>\n"; 
         $6 = $6 " " $7; NF = 6} # fix "Mounted on" 

      { 
       printf "%s\n%s\n", "<tr>", "<td>" 
       $1=$1 # recompute the line with new OFS and ORS 
       print 
      } 

      END { ORS = "\n" 
        print "</table>" }' > /tmp/filesystem_table 

sedコマンドでいくつかのキャプチャグループを実行していますが、使用していません。あなたの意図が何であるかは不明です。

ところで、seddfはBashの一部ではありません。彼らは別々のユーティリティです。

関連する問題