私は新しいユーザー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