선행 및 후행 공백과 밑줄을 제거하는 방법은 무엇입니까?

선행 및 후행 공백과 밑줄을 제거하는 방법은 무엇입니까?

공백 부분은 작동하지만 삭제를 위해 밑줄을 표시하는 빠른 방법이 있습니까?

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

https://raku.org

관련 정보