私はどんな文章でも反転できることを知っています。
echo "a,b,c,d" | rev
しかし、文章の最初の部分だけを変更したい場合はどうすればよいですか?
echo "a,b,c,d Access" | rev
私はこれを得ます:
sseccA d,c,b,a
、私が本当に欲しいものは次のとおりです。
d,c,b,a Access
どうすればいいですか?
答え1
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