区切り文字が最初に表示されたときの文字列の分割

区切り文字が最初に表示されたときの文字列の分割

多くのログファイルからいくつかのIDを取得するためにシェルでgrepを実行します。

grep "100200300" my.log*

結果は次のとおりです。

my.log:Jan 17 15:04:52 100200300 ok
my.log.1:Jan 17 14:35:17 100200300 failed

今、出力からファイル名を削除したいと思います。それでは、「:」が最初に表示されたときにこのテキストを分割して2番目の部分を出力するにはどうすればよいですか?

答え1

Steeldriverが述べたように、好ましい方法は-h--no-filename)オプションを使用することです。実装にgrepこのオプションが含まれていない場合は、出力を使用またはsed変更cutできます。

grep [OPTIONS] PATTERN [FILE...] | sed 's/[^:]*://'
grep [OPTIONS] PATTERN [FILE...] | cut -d : -f 2-

ただし、この回避策はコロン()を含むファイル名を破損するため、普遍的ではありません:

答え2

これにより、この質問の件名で必要な操作が実行されます。 「区切り文字が最初に表示されたときの文字列の分割」

#!/bin/bash
while read -r line; do
    [[ $line =~ :(.*) ]] && echo "${BASH_REMATCH[1]}"
done <<<"$(grep "100200300" my.log*)"

しかし、私はあなたに必要なものが次のとおりです。

grep -h "100200300" my.log*

この-hオプションを使用すると、ファイルの内容がいいえファイル名:

Jan 17 15:04:52 100200300 ok
Jan 17 14:35:17 100200300 failed

答え3

次の手順を実行してファイル名を削除することもできます。

cat my.log* | grep "100200300"

関連情報