여러 개의 파일이 있고 모두 동일한 데이터 패턴을 따릅니다.
이것이 내가 추출하려는 패턴이라고 가정해 보겠습니다.
First part of text...patternA......Second part of text.....patternB.....Third part of text....patternC.....End part of text
현재 나는 이것을 사용하고 있습니다 :
grep -P -o ".{0,5}patternA|.{0,5}patternB.{0,5}|patternC.{0,5}" filename.txt
내가 얻는 결과는 다음과 같습니다.
1111 patternA
2222 patternB 2222
patternC 3333
내가 정말로 원하는 결과는 다음과 같습니다.
1111 patternA 2222 patternB 2222 patternC 3333
각 패턴 끝에 있는 개행 문자를 제거하는 방법을 알 수 없는 것 같습니다.
어떻게 해야 하나요?
답변1
3개 필드가 모두 항상 존재한다는 것을 알고 있다면 "붙여넣기"를 사용하여 다음을 시도해 볼 수 있습니다.
grep -P -o ".{0,5}patternA|.{0,5}patternB.{0,5}|patternC.{0,5}" filename.txt | paste - - -
답변2
sed
캡처링 그룹을 사용하여 패턴과 일치하는 라인 부분을 출력에 복사하는 데 사용됩니다 .
sed -r -n 's/.*(.{0,5}patternA).*(.{0,5}patternB.{0,5}).*(patternC.{0,5}).*/\1 \2 \3/p' filename.txt
이는 선의 패턴이 항상 이 순서로 되어 있다고 가정합니다.
답변3
그리고 column
:
COLUMN(1) BSD General Commands Manual COLUMN(1)
NAME
column -- columnate lists
SYNOPSIS
column [-tx] [-c columns] [-s sep] [file ...]
DESCRIPTION
The column utility formats its input into multiple columns. Rows are
filled before columns. Input is taken from file operands, or, by
default, from the standard input. Empty lines are ignored.
예를 들어 ( 출력을 파이프 할 수 있다는 것을 무료로 사용하여 cat
시연 ):grep
column
$ cat example
Fuzzy
wuzzy
was
a
bear
$ cat example | column
Fuzzy wuzzy was a bear