シェルスクリプトは初めてです。私の要件は、2つのパターン間の行を取り出すことです。sed cmd内の変数を使用せずにターミナルから実行すると正常に動作します。しかし、問題は、以下のすべてのものをファイルに入れて実行しようとしたときに発生します。私はターミナルで以下CMDを使用している場合SEDコマンド内の変数を使用して2つのパターンの間の行を選択してください
#!/bin/sh
word="ajp-qdcls2228.us.qdx.com%2F156.30.35.204-8009-34"
upto="2017-01-03 23:00"
fileC=`cat test.log`
output=`echo $fileC | sed -e "n/\$word/$upto/p"`
printf '%s\n' "$output"
はそれが
sed -n '/ajp-qdcls2228.us.qdx.com%2F156.30.35.204-8009-34/,/2017-01-03 23:00/ p' test.log
回避策を提案してください正常に動作します。
あなたが本当にうまく動作すると言うコマンドは、アンカーがなく、regexpメタキャラクタとバックリファレンスのエスケープが原因で、入力ファイルの内容が誤って一致して実際に失敗します。 **本当に** sedでこれをやりたいのであれば、https://stackoverflow.com/a/29626460/1745001を参照してください。もちろん、代わりに文字列マッチングのためにawkを使用するほうがはるかに良いでしょう。正規表現マッチングの正しい方法でこれを行う方法についてのヘルプが必要な場合は、簡潔でテスト可能なサンプル入力と期待される出力を表示するために質問を編集してください。 –