特定の部分の線を取得する方法

特定の部分の線を取得する方法

私は新しいユーザーawkで、列を切り取り、列を追加し、文字を変更する方法を知っています。これで、大容量ファイルから特定のパターンをカットする必要があります。ファイルは次のようになります。

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.
3manager.org.apache.juli.FileHandler.bufferSize = 16384

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
2017-09-08 08:50:04.896 INFO 16323 --- [nio-8080-exec-8] c.c.c loginCOntroller.java:LOG:Successfully Logged In

ここでは(上記はヘッダーだけで、ファイルははるかに大きいです)、次のパターンですべての行を切り取る必要があります。

2017-09-08 08:50:04.896 INFO 16323 --- [nio-8080-exec-8] c.c.c loginCOntroller.java:LOG:

使った

   sed 's/^.*java:LOG:=//' inpufile > outputfile

しかし、それはうまくいきませんでした。

答え1

この試み:

sed -n '/.*java:LOG:/p' inpufile > outputfile

このコマンドは、sed -n '/pattern/p'次の条件を満たす文字列のみを印刷します。内側のパターンを合わせてみてください//

あなたのコマンド - sed 's/^.*java:LOG:=//'- 代替構造を使用してくださいs/pattern/replace_string/(aを見つけてpatternに置き換えますreplace_string

あなたのコマンドの例をsed見てくださいjava:LOG:

ファイル名に注意してください- "t"文字を逃した -入力ファイル、しかし入力するティー文書

この文字列と正確に一致する必要がある場合:

2017-09-08 08:50:04.896 INFO 16323 --- [nio-8080-exec-8] c.c.c loginCOntroller.java:LOG:

..パターンが長すぎると思います。

答え2

簡単にアッ(パターン別にライン抽出):

awk '/^[0-9]{4}-[0-9]{2}-[0-9]{2}.*\.java:LOG/' inputfile > outputfile

関連情報