0

シェルスクリプトでsedを使用して、プレーンテキストファイルのURLにhtmlハイパーリンクタグを追加しようとしています。

これは私のnewtext.txtの内容です:

www.example.com

スクリプトを実行した後に必要なnewtext.txtのコンテンツは次のとおりです。

<a href="http://www.example.com">www.example.com</a>

現在のスクリプトaddhtml.shの内容は次のとおりです。

#!/bin/bash
newtextv='cat newtext.txt'
sed -i.bak 's|\(www.*\)|<a href="$newtextv">\1</a>|' newtext.txt

ただし、残念ながら、スクリプトを実行すると、newtext.txtの内容は次のようになります。

<a href="$newtextv">www.example.com</a>

私のエラーは、私の変数がどのように引用されているかに何らかの形で関係していると思いますか?

最終的には、このスクリプトで完全なURL(http://を含む)も変換できるようにしたいと思います...明らかに、sedの知識を大幅に向上させる必要があります(ここまで到達するには数日かかります)が、これに頭を巻かないでください。

ありがとうございました!

4

4 に答える 4

2

ファイルの内容を変数に入れたい場合:

newtextv=$(cat newtext.txt)

しかし、実際には、おそらく次のようなものが必要になるでしょう (しかし、より良い正規表現を使用することは明らかです):

sed 's|www\.[^ ]*|<a href="&">&</a>|g' <newtext.txt >newtext.html

Sed は、every&を一致した文字列に置き換えます。

于 2012-08-03T20:38:56.950 に答える
0

なぜ変数をいじるのですか?

sed -i 's|\(www.*\)|<a href="\1">\1</a>|' newtext.txt

また

sed -i 's|www.*|<a href="&">&</a>|' newtext.txt
于 2012-08-03T20:39:36.987 に答える
0

たまたま変数に URL がある場合は、sed なしで行うこともできます。

newtextv=www.example.com
echo "<a href=\"http://${newtextv#www.}\">$newtextv</a>"

戻り値

<a href="http://example.com">www.example.com</a>

Bash では、変数置換のサブセットとして変数を操作できます。
ここで${newtextv#www.}は基本的に$newtextv、「www」を取得してカットすることを意味します。最初から

于 2012-08-03T20:50:29.110 に答える
0

あなたの問題は、2 つの小さな構文エラーです。

  1. cat newtext.txt決して実行されません。逆引用符を使用する`か、$()
  2. 一重引用符を使用'すると、変数が展開されなくなります。変数の展開を許可するには、二重引用符を使用します"

やりたいことは次のとおりです。

#!/bin/bash
newtextv=$(cat newtext.txt)
sed -i.bak "s|\(www.*\)|<a href=\"$newtextv\">\1</a>|" newtext.txt
于 2012-08-04T15:00:37.450 に答える