Linuxコンソール上で行の内容を逆にする(文字・単語での単位別)
Pocket

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
Sponsored Links

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

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。