컷을 사용하여 주어진 패턴 다음에 나오는 단어를 찾는 방법은 무엇입니까?

컷을 사용하여 주어진 패턴 다음에 나오는 단어를 찾는 방법은 무엇입니까?

다음과 같은 파일이 있습니다.

-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인쇄 패턴 공간

관련 정보