如何反转句子的第一部分?

如何反转句子的第一部分?

我知道我可以颠倒任何句子: echo "a,b,c,d" | rev

但是如果我只想反转句子的第一部分怎么办,我已经尝试过:

echo "a,b,c,d Access" | rev

我得到这个:

sseccA d,c,b,a,而我真正想要的是:

d,c,b,a Access

我怎样才能做到这一点?

答案1

一种方法是使用read将行分成第一个单词和其余部分,然后rev仅调用第一个单词

$ echo "a,b,c,d Access" | { read -r first rest; printf '%s %s\n' "$(rev <<< "$first")" "$rest"; }
d,c,b,a Access

答案2

sed

sed 's/^/ /;:1
     s/^\([^ ]*\) \([^ ]\)/\2\1 /;t1
     s/ //'

perl

perl -pe 's/\S+/reverse $&/e'

zsh

string='a,b,c,d Access'
setopt extendedglob
result=${string/(#m)[^ ]#/${(j::)${(Oas::)MATCH}}}

答案3

使用pee(三通管)来自更多实用程序( apt-get install moreutils):

echo -n "a,b,c,d Access" | pee "cut -d ' ' -f 1 | rev" "cut -d ' ' -f 2" | tr '\n' ' '

结果是d,c,b,a Access尾随空格,它来自翻译后的换行符。

答案4

一个perl办法:

$ echo "a,b,c,d Access" | perl -anle 'print ~~reverse($F[0])," @F[1..$#F]"'
d,c,b,a Access

相关内容