如何删除前导空格和尾随空格以及下划线?

如何删除前导空格和尾随空格以及下划线?

我的空格部分可以工作,但是有没有一种快速的方法来标记下划线删除?

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),它不需要特殊的参数排序(||在 Raku 中使用以获得 Perl 的“第一个匹配”语义)。

(感谢@Stéphane_Chazelas 提供以下示例)。

输入示例:

_Some String
  _foo_bar_
 _ _ x  y _ _

示例输出:

Some String
foo_bar
x  y

https://raku.org

相关内容