문자열에서 등호 주위의 공백을 제거하는 방법은 무엇입니까?

문자열에서 등호 주위의 공백을 제거하는 방법은 무엇입니까?

문자열에서 등호 주위의 선행 및 후행 공백을 제거하는 방법을 결정하려고 합니다. 공백이 있을 수도 있고 없을 수도 있습니다. 0, 1 또는 그 이상의 등호가 있을 수 있습니다.

나는 이것을 사용하려고 노력했지만 sed비참하게 실패했으며 작동하지 않는 것을 보여줄 가치조차 없습니다. 작업에 잘못된 도구를 사용하고 있는 것 같습니다. sed이 문제를 해결하기 위해 정규식을 사용할 수는 없을 것 같지만 , 제가 틀렸을 수도 있습니다.

등호 사이의 공백을 제거하는 방법은 무엇입니까?


실제 문제는 개념적으로 간단합니다. 0개 이상의 옵션이 포함된 문자열이 있습니다 a=b. 옵션은 또는 이와 유사한 것으로 제공될 a=ba = 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 emacsEmacs의 정보에 액세스하고 regexp해당 정보 페이지 내에서 검색해야 합니다.

답변3

언급되지 않았지만 Perl:

s/\s*=\s*/=/g;

관련 정보