2

我有这个..

$input = "echo     a       b                c   d"
echo -e "$input" | cut -d " " -f 2-

但我只想要一个简单的剪辑,可以消除回声和打印

a b c d #(single space) only
4

4 回答 4

5
echo -e "$input" | tr -s ' ' | cut -d " " -f2-

也摆脱了“回声”。

于 2012-08-31T16:52:47.403 回答
4

除了 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//  / }#* }不起作用)。

于 2012-08-31T16:53:14.767 回答
3

有点迂回,但很有趣:

( set -- $input; shift; echo $@ )
于 2012-08-31T16:53:08.837 回答
1

使用 sed:

sed -e 's/[ ]*[^ ]*[ ]*\(.*\)/\1/' -e 's/[ ]*/ /g' -e 's/^ *//' input_file
于 2012-08-31T16:53:31.007 回答