특정 단어 뒤에 오는 CSV 행에서 문자열을 캡처하는 방법

특정 단어 뒤에 오는 CSV 행에서 문자열을 캡처하는 방법

특정 단어 뒤에 오는 CSV 행에서 문자열을 캡처하는 방법

예를 들어, 이것은 다음 문자열을 잘라내려는 csv 행입니다./data/

status=true /data/sdb/hadoop/hdfs/log,/data/sdc/hadoop/hdfs/log,/data/sdd/hadoop/hdfs/log,/data/sde/hadoop/hdfs/log,/data/sdf/hadoop/hdfs/log

예상 결과의 예

sdb
sdc
sdd
sde
sdf

답변1

사용 grep:

PCRE 사용:

grep -Po '/data/\K[^/]*'

사용할 수 없는 경우:

grep -o '/data/[^/]*' | cut -d'/' -f3

답변2

@pLumo가 확실히 정답을 가지고 있습니다. 어떤 이유로 awkbash의 내장 매개변수 확장을 사용하고 싶은데 약간 복잡하다면...

LINE_COUNTER=0
while read line; do
    COUNT_SEP="${line//[^,]}"
    for col in $(seq 2 $((${#COUNT_SEP}+1))); do
        LINE_COUNTER=$(($LINE_COUNTER+1))
        COLUMN=$(echo "${line}" | awk -v variable="${col}" -F, '{ print $variable }')
        if [ $LINE_COUNTER -eq 1 ]
        then
            echo "${COLUMN}" > /tmp/splitCSV
        else
            echo "${COLUMN}" >> /tmp/splitCSV
        fi
    done
    while read splitCol; do
        echo "${splitCol}" | awk -F'/data/' '{ print $2 }' | awk -F'/' '{ print $1 }'
    done < /tmp/splitCSV
done < test.csv

답변3

옵션을 추가하려면 슬래시 사이의 문자 세 개를 일치시킬 수 있는 패턴은 와 단 하나뿐이라는 점을 기억 sed하세요 grep.

grep -o "/.../"  foo | sed 's;/;;g' file

산출:

sdb
sdc
sdd
sde
sdf

답변4

이것은 awk와 함께 작동합니다.

awk -F'/' '{for(i=1;i<=NF;i++) if($i=="data") print $(i+1)}' <file>

1: -F는 필드 구분 기호를 /로 정의합니다.

2: 각 행의 각 필드를 반복합니다.

3: 필드가 "data"와 같으면 다음 필드를 인쇄합니다.

관련 정보