Linuxコンソール上で、文字・単語それぞれの単位で行の内容を逆にするにはどうすればよいのだろうか。
1.文字単位で行の内容を逆にする
文字単位で行の内容を逆にする場合は、普通にrevコマンドを使ってやればよい。
コマンド | rev
blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" a bc def ghij blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | rev jihg fed cb a
その他、awkやperlを使う場合は以下のようにする。
コマンド | awk '{ for(i=length;i!=0;i--)x=x substr($0,i,1);}END{print x}' コマンド | perl -lne 'chomp;print scalar reverse' コマンド | python -c "import sys;print sys.stdin.read().rstrip()[::-1]" コマンド | ruby -pe '$_=$_.chop.reverse+"\n"'
blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | awk '{ for(i=length;i!=0;i--)x=x substr($0,i,1);}END{print x}' jihg fed cb a blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | perl -lne 'chomp;print scalar reverse' jihg fed cb a blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | python -c "import sys;print sys.stdin.read().rstrip()[::-1]" jihg fed cb a blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | ruby -pe '$_=$_.chop.reverse+"\n"' jihg fed cb a
2.単語単位で行の内容を逆にする
単語の並びを逆にする場合は、awkを使って以下のようにする。
コマンド | awk '{for (i=NF; i>1; i--) printf("%s ",$i); print $1;}'
blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | awk '{for (i=NF; i>1; i--) printf("%s ",$i); print $1;}' ghij def bc a
その他、pythonなどでは以下のようにする。
コマンド | perl -lne "chomp;print scalar join ' ', reverse split(' ')" コマンド | python -c "import sys;print ' '.join(sys.stdin.read().rsplit()[::-1])" コマンド | ruby -pe '$_=$_.chop.split(" ").reverse.join(" ")+"\n"'
blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | perl -lne "chomp;print scalar join ' ', reverse split(' ')" ghij def bc a blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | python -c "import sys;print ' '.join(sys.stdin.read().rsplit()[::-1])" ghij def bc a blacknon@BS-PUB-UBUNTU-01:/tmp$ echo "a bc def ghij" | ruby -pe '$_=$_.chop.split(" ").reverse.join(" ")+"\n"' ghij def bc a