내 파일은 JSON 형식이며 다음과 같습니다.
name: Tom species: mouse name: Stu species: cat name: Carter species: Dog
긴 문자열 파일이 있는데 이 목록에서 이름을 추출하고 싶습니다. 따라서 원하는 출력은 다음과 같습니다.
Tom Stu Carter
예를 들어, sed를 사용하여 여러 번 실패한 시도를 했습니다.
cat alphabet | sed 's/^.*name: \(.*\) species*/\1/g'
산출:
Tom species: mouse name: Stu species: cat name: Carter : Dog
이 작업을 수행하고 싶은 매우 큰 파일이 많이 있으므로 이 문제를 해결할 수 있는 효율적인 방법이 있다면 좋을 것입니다.
답변1
입력이 실제로 JSON인 경우 JSON 도구를 사용해야 합니다.
형식은 awk에 적합한 것 같습니다.
$ awk '{for (i=2;i<=NF;i++) if ($(i-1)=="name:") print $i}' file
Tom
Stu
Carter
i
두 번째 필드부터 시작하여 행의 모든 필드를 살펴봅니다 . 이전 필드가 그랬다면 name:
현재 필드가 인쇄됩니다.
모든 출력을 한 줄에 유지하려면(후행 공백 없음):
$ awk '{for (i=2;i<=NF;i++) if ($(i-1)=="name:") {printf "%s%s", f,$i; f=" "}; print""}' file
Tom Stu Carter
답변2
GNU grep을 사용하십시오:
grep -Po 'name: \K[^ ]*' file | tr '\n' ' '
또는 GNU sed를 사용하십시오:
sed -r 's/name: ([^ ]*) species: [^ ]*/\1/g' file
산출:
톰 스튜 카터