텍스트 파일이 있다고 가정해 보겠습니다.
aaa-123;bread;apple;banana
aaa-123;bread;apple;banana
aaa-123;bread;apple;banana
bbb-123;bread;apple;banana
bbb-1234;bread;app-le;banana
bbb-222;bread;apple;banana
첫 번째 열의 awk를 통해 -와; 사이의 예상 결과를 제거해야 합니다.
aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;app-le;banana
bbb;bread;apple;banana
답변1
이는 어떤 필드에 s가 포함되어 있는지, 첫 번째 필드에 s가 포함되어 있는지 여부에 관계없이 -
모든 Unix 시스템의 모든 쉘에서 모든 awk와 함께 작동합니다 .
$ awk 'BEGIN{FS=OFS=";"} {sub(/-.*/,"",$1)} 1' file
aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;app-le;banana
bbb;bread;apple;banana
답변2
sed
탐욕스럽지 않은(가능한 가장 짧은) 매칭 의 경우 :
sed 's/-[^;]*;/;/' infile
답변3
기능 사용 awk
및 사용 :split()
awk -v FS=';' 'split($1,a,/-/) {$1=a[1];print $1, $2, $3, $4}' OFS=';' file
aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;app-le;banana
bbb;bread;apple;banana
답변4
awk '{gsub(/-[0-9]*/,"",$1);print }' filename
sed 's/-[0-9]*//g' filename
파이썬
#!/usr/bin/python
import os
import re
m=re.compile(r'-[0-9]*')
k=open('filename','r')
for i in k:
m=re.sub(o,"",i)
print m.strip()
산출
aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;apple;banana