따옴표로 묶인 완전한 단어를 얻는 명령

따옴표로 묶인 완전한 단어를 얻는 명령

우리에겐 가치가 있다

XX_EMAIL_GL_BTCH_ATTACH FCP_REQID=8830260 FCP_LOGIN="APPS/pwd" FCP_USERID=4807 FCP_USERNAME="USER" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=1 "XX WBP 8-501 Misc Receipts" "[email protected]"

우리는 가치를 얻어야 합니다 XX WBP 8-501 Misc Receipts.

아래와 같이 시도했지만 XX만 반환됩니다.

echo XX_EMAIL_GL_BTCH_ATTACH FCP_REQID=8830260 FCP_LOGIN="APPS/pwd" FCP_USERID=4807 FCP_USERNAME="USER" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=1 "XX WBP 8-501 Misc Receipts" "[email protected]" | cut -d" " -f9 | sed 's/"//g'

답변1

스키마에 따라 몇 가지 열을 추가하면 됩니다 cut.

cut -d' ' -f9-13 | sed 's/"//g'

순수한 솔루션을 사용할 수도 있습니다 sed.

sed 's/.*"\(.*\)" ".*"$/\1/'

패턴은 문자열 끝에 있는 두 개의 큰따옴표에 따라 달라집니다. 이렇게 하면 두 개 중 첫 번째 항목(또는 전체 문자열에서 두 번째 큰따옴표로 묶인 하위 문자열)이 표시됩니다.

고쳐 쓰다:echoOP가 원하는 것처럼 ...

echo 'XX_EMAIL_GL_BTCH_ATTACH FCP_REQID=8830260 FCP_LOGIN="APPS/pwd" FCP_USERID=4807 FCP_USERNAME="USER" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=1 "XX WBP 8-501 Misc Receipts" "[email protected]"' | sed 's/.*"\(.*\)" ".*"$/\1/'

답변2

string 을 입력하는 방식으로 echo쉘은 큰따옴표를 사용하므로 9번째 필드의 길이를 알 수 없습니다. 먼저 문자열을 작은따옴표로 묶어야 합니다.

cut그런 다음 구분 기호로 공백을 찾고 있으며 따옴표 안의 공백을 무시하는 방법을 모른다는 점을 고려해야 합니다 . 따라서 다음을 수행하십시오.

echo 'XX_EMAIL_GL_BTCH_ATTACH FCP_REQID=8830260 FCP_LOGIN="APPS/pwd" FCP_USERID=4807 FCP_USERNAME="USER" FCP_PRINTER="noprint" FCP_SAVE_OUT=Y FCP_NUM_COPIES=1 "XX WBP 8-501 Misc Receipts" "[email protected]"' | cut -d" " -f9- | cut -d\" -f 2

첫 번째는 cut9번째 필드부터 시작하는 모든 것을 유지하고, 두 번째는 "구분 기호로 첫 번째 따옴표 쌍 안의 부분만 유지합니다.

pure를 사용하여 sed동일한 작업을 수행할 수 있습니다.

sed -E 's/([^ ]* ){8}//;s/"//;s/".*//'

어쨌든 이전 열 필드에 공백을 추가하면 스크립트가 손상될 수 있습니다.

답변3

cut추출하는 동안 사용하면 안정적인 솔루션이 제공되지 않습니다.논리해당 입력의 하위 문자열입니다.

다음 솔리드 솔루션 중 하나를 사용하십시오.

1)Python명령(단순화):

python -c 'import csv,sys; r=csv.reader(sys.stdin, delimiter=" "); print(next(r)[8])' <file

파이썬~의데이터 세트모듈 ID는 표 형식 데이터를 읽고 쓰는 데 적합합니다.


2)GNUawk주문하다:

awk -v FPAT='"[^"]+"|[^"]+' '{ gsub("\"","",$8); print $8 }' file

출력은 다음과 같습니다둘 다방법:

XX WBP 8-501 Misc Receipts

관련 정보