我的空格部分可以工作,但是有没有一种快速的方法来标记下划线删除?
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