我有这个..
$input = "echo a b c d"
echo -e "$input" | cut -d " " -f 2-
但我只想要一个简单的剪辑,可以消除回声和打印
a b c d #(single space) only
我有这个..
$input = "echo a b c d"
echo -e "$input" | cut -d " " -f 2-
但我只想要一个简单的剪辑,可以消除回声和打印
a b c d #(single space) only
echo -e "$input" | tr -s ' ' | cut -d " " -f2-
也摆脱了“回声”。
除了 bash 提供的内置工具之外,您不需要任何工具。
[ghoti@pc ~]$ input="echo a b c d"
[ghoti@pc ~]$ output=${input// / }
[ghoti@pc ~]$ echo $output
echo a b c d
[ghoti@pc ~]$ echo ${output#* }
a b c d
[ghoti@pc ~]$
好处:您避免了管道的额外开销。
不利的一面:您需要分配一个额外的变量,因为您不能在复杂的模式扩展中进行复杂的模式扩展(即echo ${${input// / }#* }
不起作用)。
有点迂回,但很有趣:
( set -- $input; shift; echo $@ )
使用 sed:
sed -e 's/[ ]*[^ ]*[ ]*\(.*\)/\1/' -e 's/[ ]*/ /g' -e 's/^ *//' input_file