我知道我可以颠倒任何句子:
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