문자열에서 등호 주위의 선행 및 후행 공백을 제거하는 방법을 결정하려고 합니다. 공백이 있을 수도 있고 없을 수도 있습니다. 0, 1 또는 그 이상의 등호가 있을 수 있습니다.
나는 이것을 사용하려고 노력했지만 sed
비참하게 실패했으며 작동하지 않는 것을 보여줄 가치조차 없습니다. 작업에 잘못된 도구를 사용하고 있는 것 같습니다. sed
이 문제를 해결하기 위해 정규식을 사용할 수는 없을 것 같지만 , 제가 틀렸을 수도 있습니다.
등호 사이의 공백을 제거하는 방법은 무엇입니까?
실제 문제는 개념적으로 간단합니다. 0개 이상의 옵션이 포함된 문자열이 있습니다 a=b
. 옵션은 또는 이와 유사한 것으로 제공될 a=b
수 a = b
있습니다 a= b
. 으로 정규화해야 합니다 a=b
.
및 와 같은 여러 줄 문자열에 코너 케이스가 존재할 수 있습니다 CR
. LF
공백을 깨는 것이 중요한 지점까지는 도달하지 못했습니다. 그렇게 할 수 있다면 나는 그것을 기형이라고 부르고 여러 줄로 된 문자열을 거부하고 싶을 것입니다.
답변1
don_crissti도 Julie Pelletier도 완벽한 댓글을 답변으로 바꾸지 않았기 때문에 Don은 다음과 같은 결론에 도달했습니다.
sed 's/[[:blank:]]*=[[:blank:]]*/=/g'
sed
... 목표를 달성하기 위해 정규식과 문자 클래스를 사용합니다 . 내부적으로 [:blank:]
공백이나 탭을 캡처하고 외부적으로 []*
0개 이상의 공백/탭 캡처를 나타냅니다. 등호는 그 자체를 나타내고 동일한 정규식을 반복합니다. (선택 사항) 공백, 등호 및 (선택 사항) 공백은 모두 등호로 대체되며 이 g
플래그는 sed에게 해당 줄이 나타날 때마다 검색 및 바꾸기를 반복하도록 지시합니다.
입력 예:
$ cat input
a=b a = b a= b a =b
그리고 출력:
$ sed 's/[[:blank:]]*=[[:blank:]]*/=/g' input
a=b a=b a=b a=b
답변2
나는 emacs를 사용하여 이것을 할 것입니다:
$x replace-regexp
\s *=\s *
=
등호 주위의 공백을 식별하고 바꿔야 하는 \s *=\s *
정규식은 어디에 있습니까? =
일반적으로 \sC
문자 클래스로 해석되며 C
, 이 경우 공백(탭일 수도 있음)입니다. 공백만 필요한 경우에는 *
(예: * 앞의 공백)을 사용하세요.
두 번째 문제가 있는 것 같습니다. How do I delete whitespace between equal signs?
이 경우 다음을 수행해야 합니다.
$x replace-regexp
=\s *=
==
나는 항상 sed와 awk를 다시 찾아야 합니다. 사용할 수 있으면 항상 emacs를 사용하겠습니다. Emacs에서는 를 C-h i
사용하여 정보 시스템에 액세스한 다음 m emacs
Emacs의 정보에 액세스하고 regexp
해당 정보 페이지 내에서 검색해야 합니다.
답변3
언급되지 않았지만 Perl:
s/\s*=\s*/=/g;