web-dev-qa-db-ja.com

grepを使用して文字列にスペースを含める方法

誰かがこれで私を助けることができます:

文字列を照合して、タイムスタンプを抽出しようとしています。このため、grep/awkコマンドの組み合わせを使用しています。スティングには[1]の前と後の4つのspcesがあるので、それを回避する方法が混乱しています。プログラミングは初めてなので、ここで助けが必要です。

IS="$(grep 'Starting    [1] TaskInit' process.log |  awk '{print $4}')"
echo "$IS"

目的:process.logファイルの文字列と一致し、その行に関連するタイムスタンプを出力する必要があります。

1
Manoj Kumar

スペースはここでは問題ではなく、問題なく機能するはずです。
しかし、かっこ[は正規表現でエスケープする必要があります。だから書く:

grep 'Starting    \[1] TaskInit' process.log

あなたの場合、正規表現ではなく固定文字列と一致させたいので、代わりにgrep -Fを使用する必要があります。その後、脱出する必要はありません:

grep -F 'Starting    [1] TaskInit' process.log
5
pLumo

角括弧は特別な意味があるため、エスケープする必要があります。

grep 'Starting    \[1\] TaskInit' process.log

さらに、このタスクではawkのみを使用します。このためには、次のようなものが必要です。

awk '/Starting    \[1] TaskInit/ {print $4}' process.log
3
pa4080