回答:
このようなもの?
grep 'URL' file.php | rev | cut -d "'" -f 2 | rev
または
grep 'URL' file.php | cut -d "'" -f 4 | sed s/'http:\/\/'/''/g
http://を取り除く。
http://url.com
なかったFrantiqueの答えを試しましたurl.com
/
sedで何かと一致させたい場合は、通常、のような別の区切り文字を使用する必要がありますsed s@http://@@g
。
あなたはシンプルですべてを行うことができますgrep
:
grep -oP "http://\K[^']+" file.php
からman grep
:
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression (PCRE, see
below). This is highly experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
トリックは\K
、Perl正規表現でを使用することdiscard everything matched to the left of the \K
です。したがって、正規表現は、で始まる文字列を検索し、http://
その後、可能な限り\K
多くの非'
文字を続けます。と組み合わせると-o
、URLのみが印刷されます。
Perlで直接行うこともできます。
perl -ne "print if s/.*http:\/\/(.+)\'.*/\$1/" file.php\
これを再度検討し、Bashシェルのみを使用しようとすると、別の1行のソリューションは次のとおりです。
while read url; do url="${url##*/}" && echo "${url%%\'*}"; done < file.in > file.out
file.inには「ダーティー」URLリストが含まれ、file.outには「クリーン」URLリストが含まれます。外部依存関係はなく、新しいプロセスやサブシェルを生成する必要はありません。元の説明とより柔軟なスクリプトを次に示します。ここにメソッドの良い要約があります。例10-10を参照してください。これは、Bashのパターンベースのパラメーター置換です。
アイデアを拡張する:
src="define('URL', 'http://url.com');"
src="${src##*/}" # remove the longest string before and including /
echo "${src%%\'*}" # remove the longest string after and including '
結果:
url.com
外部プログラムを呼び出す必要はありません。さらに、次のbashスクリプトでget_urls.sh
は、ファイルを直接またはstdinから読み取ることができます。
#!/usr/bin/env bash
# usage:
# ./get_urls.sh 'file.in'
# grep 'URL' 'file.in' | ./get_urls.sh
# assumptions:
# there is not more than one url per line of text.
# the url of interest is a simple one.
# begin get_urls.sh
# get_url 'string'
function get_url(){
local src="$1"
src="${src##*/}" # remove the longest string before and including /
echo "${src%%\'*}" # remove the longest string after and including '
}
# read each line.
while read line
do
echo "$(get_url "$line")"
done < "${1:-/proc/${$}/fd/0}"
# end get_urls.sh
[t]csh
で機能するため、sh、bash、dash、ksh、zsh ...
すべての行にURLが含まれている場合:
awk -F"'|http://" '{print $5}' file.php
一部の行のみにURLが含まれている場合:
awk -F"'|http://" '/^define/ {print $5}' file.php
他の行によっては、^define
正規表現を変更する必要がある場合があります
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
シンプル:
php -r 'include("file.php"); echo URL;'
「http://」を削除する必要がある場合は、次のようにします。
php -r 'include("file.php"); echo URL;' | sed 's!^http://\(.*\)!\1!'
そう:
myURL=$(php -r 'include("file.php"); echo URL;' | sed 's!^http://\(.*\)!\1!')
用語を絞り込むために必要なURLの特定の部分が必要な場合、URLは次のすべて、場合によってはそれ以上です。
URL := protocol://FQDN[/path][?arguments]
FQDN := [hostname.]domain.tld
私にとって、grep
リンクの後に返された文字列情報を与えられた他の回答。
これは私だけを引き出すのに役立ちましたurl
:
egrep -o "(http(s)?://){1}[^'\"]+"
cat file.php | grep 'URL' | cut -d "'" -f 4
。