공백 부분은 작동하지만 삭제를 위해 밑줄을 표시하는 빠른 방법이 있습니까?
echo \"" & [applescript string input] & "\" | xargs
문맥:
애플 스크립트:
on trim(i)
return (do shell script "echo \"" & i & "\" | xargs")
end trim
set input to " _someString "
set output to trim(input)
- 현재 출력: 예상대로 "_some_String"입니다.
- 원하는 출력: "some_String"
답변1
앞뒤 공백 문자와 밑줄은 다음과 같은 방법으로 제거할 수 있습니다 sed
.
sed 's/^[_[:space:]]*//; s/[_[:space:]]*$//'
이는 다음과 같습니다:
_foo_bar_
_ _ _ x y _ _
입력하다:
foo_bar
x y
xargs
어떤 경우에도 텍스트 처리에는 사용하지 마십시오 . xargs
매우 구체적인 방식으로 입력을 처리합니다. 이는 사용자가 원하는 것과 거의 다릅니다(일부 공백 문자를 분할하고 그 목록은 구현마다 다르며 따옴표와 백슬래시를 고유한 방식으로 처리하고 일부 구현은 _
의미의 끝으로 처리됨) 입력 , 일부는 텍스트가 아닌 부분에 대한 질식, 일부는 행 길이 또는 인수 수에 대한 제한이 매우 낮습니다...) echo
명령이 제공되지 않을 때 기본적으로 실행됩니다. 이는 악명 높고 사용할 수 없으며 이식 가능하며 프로세스 출력 라인도 생성합니다. 각각(그리고 echo
각 출력에서 독립 실행형 유틸리티를 실행합니다)
일부 sed
구현에서는 텍스트가 아닌 입력이나 너무 긴 줄도 차단합니다.
답변2
사용행복하다(이전 Perl_6)
raku -ne '.subst(:global, / ^ <[\s_]>* | <[_\s]>* $ /).put;'
#OR
raku -pe '.=subst(:global, / ^ <[\s_]>* | <[_\s]>* $ /);'
또는
raku -ne 'put S:g/ ^ <[\s_]>* | <[_\s]>* $ //;'
#OR
raku -pe 's/ ^ <[\s_]>* | <[_\s]>* $ //;'
<[_\s]>
위의 Raku 코드는 <[
... 태그로 생성된 사용자 정의 문자 클래스를 사용합니다 ]>
. Raku의 |
파이프라인 운영자또는특별한 인수 순서가 필요하지 않은 LTM(Longest Token Match)을 기반으로 합니다( ||
Perl의 "첫 번째 일치" 의미를 얻기 위해 Raku에서 사용됨).
(아래 예시를 제공해주신 @Stéphane_Chazelas에게 감사드립니다)
입력 예:
_Some String
_foo_bar_
_ _ x y _ _
예제 출력:
Some String
foo_bar
x y