큰 텍스트 파일이 있는데 그 중 일부는 다음과 같습니다(편집된 값).
JULIANA XXXX006060 LI1033322 THC BRL 730.00
XXXX006296 AA1004737 THC BRL 1,740.00
SANTOS JULIANA XXXX006668 AA1004786 THC BRL 8,150.00
SANTOS JULIANA CABINDA XXXX006697 AA1004777 THC BRL 2,325.00
SANTOS JULIANA XXXX006699 AA1004790 THC BRL 2,325.00
JULIANA BATA XXXX006141 CCC012946 THC BRL 1,460.00
JULIANA BATA XXXX006153 CCC013054 THC BRL 870.00
JULIANA XXXX006269 CCC013105 THC BRL 870.00
JULIANA XXXX006295 CCC013083 THC BRL 870.00
JULIANA BATA XXXX006305 CCC013043 THC BRL 1,460.00
나는 항상 으로 시작하는 문자열을 cut
잡고 싶지만 동일한 필드 번호에 있을 수는 없습니다.awk
XXXX00
쉘 스크립트에서 이 작업을 어떻게 수행할 수 있습니까?
답변1
단지 grep
그것을 위해서:
grep -oE 'XXXX00[0-9]*' file
-o
: 일치하는 부분만 인쇄합니다.-E
: 확장 정규식을 활성화합니다.[0-9]*
: 검색하려는 문자열 뒤에는 숫자만 나타날 수 있습니다.
답변2
오른쪽에서 5번째 필드를 원하는 것 같습니다.
awk '{print $(NF-4)}' file
답변3
grep
PCRE와 함께 사용:
% grep -Po '(^|\s)\KXXXX00[^\s]*(?=(\s|$))' file.txt
XXXX006060
XXXX006296
XXXX006668
XXXX006697
XXXX006699
XXXX006141
XXXX006153
XXXX006269
XXXX006295
XXXX006305
이 경우 (단어) 없이도 할 수 있습니다 -w
. 단어를 구성하는 문자는 다음과 같이 처리됩니다 [[:alnum:]_]
.
% grep -wo 'XXXX00[^ ]*' file.txt
XXXX006060
XXXX006296
XXXX006668
XXXX006697
XXXX006699
XXXX006141
XXXX006153
XXXX006269
XXXX006295
XXXX006305
답변4
sed 's/[^0]* *\([^ ]*\).*/\1/' <in >out
사람 목록이 있고 이름 수가 다르기 때문에 필드 수가 다른 것 같습니다. 하지만 그 중 0이 포함된 이름이 없을 수도 있으므로 1이 포함된 첫 번째 공백으로 구분된 문자열을 완전히 잘라내고 저장한 다음 그 이후의 모든 항목을 잘라냅니다.