
나는 이 파일을 가지고 있습니다 :
[default]
region = us-east-1
output = json
[profile automation]
region = us-east-1
output = json
[profile qa]
region = us-east-1
output = json
다음과 같이 프로필 이름을 추출하면 됩니다.
default
automation
qa
지금까지 내 sed :
gsed 's?\[[^\ ]*\ \([^\]]*\)?\1?' ~/.aws/config
\([^\]]*\)
테스트할 때 공백 뒤의 첫 번째 문자만 일치하는 것을 볼 수 있습니다 (예: in a
, automation
in q
qa 등). 왜 한 번만 일치합니까? 그것을 제거하는 더 좋은 방법이 있습니까 []
? 감사해요.
답변1
괄호 안에 있는 백슬래시는 리터럴입니다. 당신이 원하는 [^]]
. 표현식은 [^\]]*
백슬래시가 아닌 항목과 일치하며 그 뒤에는 선택적인 ]
.
$ sed -En 's/^\[(.* )?([^]]*)\]$/\2/p' file
default
automation
qa
[...]
예를 들어 공백으로 끝나는 선택적 단어를 내부의 첫 번째 하위 문자열로 허용합니다 [group name]
. 이러한 선택적 단어 뒤의 문자열( 까지 ]
)은 두 번째 그룹에 캡처됩니다.
각 줄의 기본 인쇄는 꺼지고 -n
대신 각 대체가 성공한 후에 명시적으로 인쇄됩니다.
수정자는 확장된 정규식 수정자이기 -E
때문에 이것이 필요합니다 .?
그렇지 않은 경우 대신 -E
사용할 수 있습니다 ( 캡처 및 를 각각 으로 변경 ).\{0,1\}
?
(
)
\(
\)
답변2
GNU grep
또는 호환 PCRE 지원으로 구축:
grep -Po '^\h*\[\h*(\H+\h+)?\K.*[^]\h](?=\h*\]\s*$)'
MS Windows ini 파일에서 흔히 볼 수 있는 CR 문자의 수직 공백을 포함하여 들여쓰기에 앞의 가로 공백과 뒤의 공백을 허용하는 경우도 있습니다.
다음과 같이 입력하면:
[default]
[profile automation]
[profile a b]
[profile c d ]
그것은 다음을 제공합니다:
default
automation
a b
c d