2012-02-21 5 views
0

私は文の中の単語を逆の順序で戻すものが必要です。私はスクリプトを書かずに行うことが可能であると確信しています。 echo AAaa BBbb CCcc | fooとプリントCCcc BBbb AAaaunixで文中の単語をすばやく元に戻す方法はありますか?

申し訳などの入力ストリームを受信

何かが、私は言葉自体は元に戻すべきではありません、例を変更しました。あなたもtacをこのように使用してみてくださいよう

[OK]を、::

~ $ echo -n "AAaa BBbb CCcc DDdd " | tac -s ' ' 
DDdd CCcc BBbb AAaa ~ $ 

~ $ echo AAA BBB CCC DDD | rev 
DDD CCC BBB AAA 
~ $ 

EDIT:だから、REVは、そこにある

答えて

6

よくこの質問を見たとき、私はタックかレブも考えました。しかし、私はOPはAAA BBBで悪い例を作ったと思う。彼は "単語"を元に戻すことを望むかもしれないが、すべての文字を戻すことはできない。

それはあなたが望むものである場合は、これを参照してください。サブプロセスを必要とせずして、純粋なbashで

kent$ echo "this is another test example"|awk '{for(i=NF;i>0;i--)printf $i" "}' 
example test another is this  
+0

このソリューションは複数行の入力で動作しますが、最後のスペース。それは 'echo"とチェッカーすることができます。 awk '{for(i = NF; i> 0; i - )printf $ i ""}' | sed -e 's/^/| /; s/$/| /' 'となります。 – jfg956

+0

不要な末尾のスペースを避けるようにしてください。 'echo" a b c "| awk '{for(i = NF; i> 1; i - )printf $ i ""} {print $ 1}' '(' printf $ 1'を使用します。 –

5

は必ずそのrevを動作しません。文字列の最後に新しい行が表示されないという問題のみです。

2
tac AAAA BBBB CCCC 

これを試してみてください!

+0

(笑)、私も最初のショットとして... – Kent

+1

は、私はあなたが 'エコー「AAAA BBBB CCCC」を意味したと思うことを考え| tac' 私にとっては、それは単語ではなく行を戻します。 – zeroos

+0

@zeroos今すぐmac osxの非常に古いバージョンだから、私はそれを直接確認することはできません:)(古いmac osはcatコマンドを持っていません) – DonCallisto

4
echo AAaa BBbb CCcc | tr ' ' '\n' | tac | tr '\n' ' ' 
0

を、そしてawkのソリューションのように複数行入力に作業していて、あれば動作しませんライン:-(の始め/終わりの単語間のスペースの数:。。

function revert_line_in() { 
    test $# -eq 0 && return 
    test $# -eq 1 && echo -n "$1" 
    test $# -eq 1 || { local word=$1; shift; revert_line_in [email protected]; echo -n " $word"; } 
} 

function revert_line() { 
    while read line; do revert_line_in $line; echo; done 
} 

echo -e " AAaa BBbb CCcc\nthis is another test example" | revert_line 

revert_line <<< "AAaa BBbb CCcc 
this is another test example" 

revert_line < file 

注ローカル変数を宣言する機能でlocalキーワードを省略した場合、解決策ブレーク

1

不可解なバージョンが複数行入力に取り組んで、sedは、と単語の間と行の先頭/末尾のスペースがusind:

echo -e " AAaa  BBbb CCcc\nZ Y X" | sed -e 'G;:a;s/^\([^ ]*\) \(.*\)\n\(.*\)$/\2\n \1\3/;ta;s/\n//' 

何それがないことである:

  1. 追加ライン(Gコマンド)の最後に新しい行、
  2. は、ループは、前に
  3. 、単に改行(ビッグsコマンド)の後に第一の単語を入れて単語がある限り、
  4. 最後の単語(今は1番目)と残りの文の間に新しい行を削除します。
関連する問題