저는 현재 식별자(grep에서 검색)에서 값을 분리하는 쉘 스크립트를 작성 중입니다.
예를 들어 특정 파일을 grep하면 다음 정보를 검색합니다.
value1 = 1
value2 = 74
value3 = 27
정보를 얻고 이를 다음 형식으로 변환하는 데 사용할 수 있는 UNIX 명령이 무엇인지 알고 싶습니다.
1 74 27
답변1
당신은 그것을 사용할 수 있습니다앗이와 같이:
grep "pattern" file.txt | awk '{printf "%s ", $3}'
용도에 따라 다르지만 다음 용도 로 grep
사용하는 것을 고려해야 합니다 .awk
grep그 자체:
awk '/pattern/{printf "%s ", $3}' file.txt
또 다른 방법은세게 때리다 분사:
echo $(awk '/pattern/{print $3}' file.txt)
편집하다: 좀 더 흥미로운 방법이 있어요가입하다값:
awk '/pattern/{print $3}' file.txt | paste -sd " " -
답변2
첫 번째 공백과 다음 공백까지 모든 것을 제거하고 =
줄 바꿈을 공백으로 변환하고 마지막 줄 바꿈을 인쇄합니다.
… | sed 's/^[^=]*= *//' | tr '\n' ' '; echo
답변3
좀 더 간단한 건 어때요?
cut -d= -f2 /tmp/file | xargs printf "%s "
이는 다음과 같은 이유로 작동합니다.
- 쉘 내장 "printf"는 출력 문자열에 지정된 것보다 더 많은 인수를 얻으면 "자체 반복"됩니다.
- xargs는 입력의 줄을 printf에 전달된 명령줄의 단어로 변환합니다.
- cut은 =를 구분 기호로 사용하고 그 뒤에 오는 내용만 전달합니다.
- 물론 printf 문자열은 출력을 표시하며 명시적인 새 줄이 추가되지 않으므로 각 문자열은 이전 줄의 끝에 추가됩니다.