1

URL を解析してテキストを抽出し、ダウンロード時にファイルの名前を変更できるようにしようとしています。基本的に、これを行うためにシェルスクリプトに書きたいと思います。URLを文字列に収集してから、文字ごとに解析したいと思います。これはシェルスクリプトでどのように行うことができますか???

4

3 に答える 3

1

Substring Expansion次の構文を使用して、文字列を 1 文字ずつ読み取ることができます。

${parameter:offset:length}

例:

str="abcd"
char=${str:1:1} # => "b"

Parameter lengthそして、次の構文で文字列の長さを取得します。

${#parameter}

例:

${#str}

したがって、これを使用して文字を反復処理できます。

for (( i = 0; i < ${#str}; ++i)); do
    echo "${str:$i:1}"
done

bash マニュアルから:

${#parameter}

Parameter length. の値の文字数 parameter が置換されます。

   

${parameter:offset}
${parameter:offset:length}

Substring Expansion. parameter で指定された文字から始まり、length 文字まで展開されoffsetます。

于 2011-09-05T10:01:01.643 に答える
0

これにより、保存するファイル名が得られます。

url="http://www.example.com/path?foo#bar"
echo $(basename "${url%%[?#]*}")
# => "path"

使い方:

  • "${url%%[?#]*}"?andの後にあるものをすべて#削除します (クエリとハッシュを削除します)
  • $(basename "...")最後のパス コンポーネント (最後の / の後の部分) を返します。
于 2011-09-05T09:53:30.430 に答える
0
url='http://youtube.com/watch?v=Od3xkrxcsE8&feature=relmfu'
url=${url#*v=}
url=${url%%&*}

または、効率が悪い(外部コマンドを開始する)sedを使用できますが、より柔軟で、より複雑なケースでも読みやすくなります。

url='http://youtube.com/watch?v=Od3xkrxcsE8&feature=relmfu'
url=$(printf '%s' "$url" | sed 's+.*v=\([^&]*\).*+\1+')

シェル( /bin/sh) では、${var#prefix-pattern}のみ${var%suffix-pattern}が使用可能な文字列操作関数であることに注意してください。bashzshにはもっと多くの機能がありますが、そのような拡張機能を使用していることに常に注意してください。システムによってはより単純なシェルがインストールされているものもあれば、システムによっては bash がまったくないもの (通常は Linux や組み込みシステム以外の Unix フレーバー) もあるためです。/bin/sh

于 2011-09-05T11:04:01.533 に答える