![컷을 사용하여 주어진 패턴 다음에 나오는 단어를 찾는 방법은 무엇입니까?](https://linux55.com/image/62276/%EC%BB%B7%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A3%BC%EC%96%B4%EC%A7%84%20%ED%8C%A8%ED%84%B4%20%EB%8B%A4%EC%9D%8C%EC%97%90%20%EB%82%98%EC%98%A4%EB%8A%94%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 파일이 있습니다.
-config1
-config2 param2
-config3 param3a param3b
-config4 param4
다음을 사용하여 추출할 수 있습니다 param2
.
echo $(<file) | cut -d' ' -f3
그러나 나는 항상 뒤에 오는 단어를 얻을 수 있도록 수정하여
-config2
이러한 단어가 재배열되거나 무언가가 삽입되면 내 명령이 계속 작동하도록 하고 싶습니다. 무엇을 시청해야 하나요?
설명: 특정 줄에 여러 개의 매개변수가 있을 수 있지만(또는 전혀 없을 수도 있음) -config
항상 한 줄에 최대 하나의 옵션이 있습니다.
답변1
나는 이것을 위해 awk를 사용할 것입니다
awk '/^-config2/ {print $2}' file
로 시작하는 줄에 대한 두 번째 인수를 인쇄합니다 -config2
. ^
줄의 시작을 나타냅니다 .
답변2
이 시도:
perl -ne 'if (/-config2\s*(.*)/) { print "$1\n"; }'
이는 일치하는 줄을 찾은 -config2
다음 해당 줄의 나머지 부분을 인쇄합니다( \s*
공백의 양과 일치 (.*)
하고 무엇이든 일치하여 바인딩합니다 $1
).
내 이전 대답은 그 -config2
뒤에 단어가 따른다고 가정합니다.
perl -ne 'if (/-config2\s*(\S+)/) { print "$1\n"; }'
이것은 일치하는 줄을 찾은 -config2
다음 그 뒤의 첫 번째 토큰을 인쇄합니다( \s*
공백의 양과 일치하고, (\S+)
공백이 아닌 문자의 비어 있지 않은 시퀀스와 일치하고 그에 바인딩됩니다 $1
).
답변3
sed의 변형:
sed -n 's/^-config2 //p' file
-n
자동 인쇄 억제
s/^-config2 //
-config2
패턴 공간에서 무엇이든 시작하는 줄의 대체 및 후행 공백
p
인쇄 패턴 공간