잘라낸 명령 필드 값에서 단어와 값을 자르는 방법은 무엇입니까?

잘라낸 명령 필드 값에서 단어와 값을 자르는 방법은 무엇입니까?

내 파일의 줄 형식은 다음과 같습니다.

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

관련 정보