私のファイルにはhi.html
テキスト行がたくさんあります。見つけなければなりません
Hello abc123 blah blah blah
その後、場所は随時変更されますが、ハードコードされ、常に「Hello」というmyvariable
テキストを保存します。スペースはすべての重要なテキストの側面を区別します。abc123
Hello
abc123
答え1
まず、義務的な警告です。通常とても悪い考えです。正規表現などの簡単なツールを使用してHTMLを解析します。つまり、この場合、目的の内容が常にで始まる行の2番目の単語であると確信している場合は、次のいずれHello
かを使用できます。
牛に似た一種の栄養
grep
grep -oP '^Hello\s+\K\S+'
grep
これは、Perl準拠の正規表現(regex-P
)を使用して-o
行の一致部分のみを印刷するように指定することによって行われます。正規表現自体はを検索Hello
し、1つ以上の空白文字(\s+
)を見つけ、それを削除し(\K
)、空白ではなく1つ以上の文字()を探します\S+
。アッ
awk '$1=="Hello"{print $2}' file
awk
入力行をスペースに自動的に分割します。最初のフィールドは$1
、2番目のフィールド$2
はです。したがって、最初のフィールドがある場合、このスクリプトは2番目のフィールドを印刷しますHello
。一致しませんのでご注意くださいHelooo
。最初の行がすべて必要な場合数値Hello
必ずしも最初の単語があるだけではなく、代わりにHello
以下を使用してください。awk '/^Hello/{print $2}' file
どちらの方法でも出力を変数に保存するには、次のようにします。コマンドの置き換え:
myvariable=$(grep -oP '^Hello\s+\K\S+')
myvariable=$(awk '/^Hello/{print $2}' file)
答え2
PCREをサポートしている場合は、grep
次のことができます。
grep -Po '^Hello \K[^ ]+(?= )' hi.html
変数に保存するには:
myvariable="$(grep -Po '^Hello \K[^ ]+(?= )' hi.html)"
他のsed
方法:
sed -n 's/^Hello \([^ ]\+\) .*/\1/p' hi.html
それを保存するにはmyvariable
:
myvariable="$(sed -n 's/^Hello \([^ ]\+\) .*/\1/p' hi.html)"
HTMLを解析するために正規表現を使用することはおそらく良い考えではないかもしれません。