3

<strong>タグでラップされた URL を抽出する必要があります。単純な正規表現ですが、シェルスクリプトでそれを行う方法がわかりません。次に例を示します。

line="<strong>http://www.example.com/index.php</strong>"
url=$(echo $line | sed -n '/strong>(http:\/\/.+)<\/strong/p')

$url変数に「http://www.example.com/index.php」が必要です。

ビジーボックスを使用。

4

4 に答える 4

1

これはうまくいくかもしれません:

url=$(echo $line | sed -r 's/<strong>([^<]+)<\/strong>/\1/')
于 2012-09-11T14:29:13.047 に答える
0

更新:busybox使用法として、機能が機能しない可能性が高いとash想定したソリューション。bash少しだけ長くなりますが、それでもPOSIXに準拠しています。

url=${line#<strong>}  # $line minus the initial "<strong>"
url=${url%</strong>}  # Remove the trailing "</strong>"

(または同様の機能を備えた別のシェル)を使用しているbash場合は、拡張パターンマッチングとパラメーター置換を組み合わせることができます。(busyboxがサポートする機能はわかりません。)

# Turn on extended pattern support
shopt -s extglob

# ?(\/) matches an optional forward slash; like /? in a regex
# Expand $line, but remove all occurrances of <strong> or </strong>
# from the expansion
url=${line//<?(\/)strong>}
于 2012-09-11T15:12:51.333 に答える
0
url=$(echo $line | sed -n 's!<strong>\(http://[^<]*\)</strong>!\1!p')
于 2012-09-11T14:29:13.920 に答える
0

バックスラッシュでスラッシュをエスケープする必要はありません。正規表現でエスケープする必要があるのはバックスラッシュだけです。?また、HTML ソースコードに複数の強力なタグがある場合に必要以上の結果が得られないように、-operatorで貪欲でない一致を使用する必要があります。

strong>(http://.+?)</strong
于 2012-09-11T14:31:48.083 に答える