내 파일의 줄 형식은 다음과 같습니다.
29.101.26.176 [11/Oct/2017:10:21:41 /pmk/clk?aff_id=5863&off_id=85635&trans_id=easoli4ddq8sssdf&prm2=23398_27530&device_id=864792012331091090 "Mozilla/5.0 Mobile
잘라야 aff_id=5863
하고 off_id=85635
.trans_id=easoli4ddq8sssdf
cut
필드 내의 단어가 아닌 명령에서 특정 필드 만 잘라낼 수 있습니다 . 주어진 단어를 어떻게 분리할 수 있나요?
답변1
짧은grep방법:
grep -Eo '([ao]ff|trans)_id=[^&]+' file
산출:
aff_id=5863
off_id=85635
trans_id=easoli4ddq8sssdf
----------
또는앗고정된 프로젝트 주문에 대한 솔루션:
awk -F'[?&]' '{ printf "%s %s %s\n",$2,$3,$4 }' file
산출:
aff_id=5863 off_id=85635 trans_id=easoli4ddq8sssdf
답변2
GNU를 사용하여 sed
일치하는 패턴을 제거합니다 .
sed -E 's#([ao]ff|trans)_id=[^&]*&##g' infile
이러한 문자열 값을 얻으려는 경우.
sed 's#.*\(aff_id=[^&]\).*\(off_id=[^&]\+\).*\(trans_id=[^&]\+\).*#\1 \2 \3#' infile
aff_id=5863 off_id=85635 trans_id=easoli4ddq8sssdf