sed를 사용하여 열에서 여러 데이터 추출

sed를 사용하여 열에서 여러 데이터 추출

다음과 같은 정보가 포함된 파일이 있습니다.

Info A: 1
Info B: 2
Info C: 3
Info D: 4

Info A: 1
Info B: 2
Info C: 123
Info D: 4

이제 Info C를 이용해서 라인을 구하려고 하는데, 따로 사용해야 합니다. 첫 번째 블록에 대한 Info C의 출력을 가져오는 명령과 두 번째 블록에 대한 Info C의 출력을 가져오는 명령이 필요합니다. 이 명령은 두 블록 C의 정보를 얻는 데 효과적이었습니다. 명령의 첫 번째 부분에서는 Info C가 포함된 줄을 제외한 모든 줄을 삭제합니다. 명령의 두 번째 부분에서는 "Info C:" 문자열을 삭제합니다.

cat test2 | sed -e '/Info C: /!d' -e 's/Info C: //'

출력에는 다음 값만 포함됩니다.

3
123

이제 혼자서 해결하기 위해 sed의 여러 매개변수를 시도했지만 아무것도 효과가 없었습니다.

다음 솔루션이 나에게 적합합니다. 첫 번째 또는 마지막 줄만 인쇄합니다.

cat test2 | sed -e '/Info C: /!d' -e 's/Info C: //' | sed -n '$p'
cat test2 | sed -e '/Info C: /!d' -e 's/Info C: //' | sed -n '1p'

하지만 알고 싶습니다. sed 두 번째 파이프가 없는 솔루션이 있나요?

답변1

쉘이 배열을 지원한다면 다음과 같이 할 수 있습니다:

$ infoC=( $(sed -n 's/Info C: \(.*\)/\1/p' file ) )
$ echo ${infoC[0]}
3
$ echo ${infoC[1]}
123

또는 GNU를 사용하십시오 sed.

infoC=($(sed -rn 's/Info C: (.*)/\1/p' file ))

sed여기서는 더 간단한 명령을 사용하고 있습니다 . 정상적인 출력을 억제 하므로 -n사용자가 지시한 행만 인쇄합니다. 대체 연산자는 다음 줄과 일치합니다 Info C:.포착(괄호 포함) 다른 이름으로 저장할 값입니다 \1. 따라서 줄을 교체 \1하고 인쇄합니다( p마지막 줄).

이는 배열의 출력을 배열에 저장하는 방법입니다 var=( $(command) ). 첫 번째 요소는 다음과 같고 두 번째 요소는 다음과 같습니다. 여기서 배열 이름은 입니다.commandvar${var[0]}${var[1]}infoC

답변2

cat test2 | sed -e '/Info C: /!d' -e 's/Info C: //' | sed -n '1p;$p'

관련 정보