rev
rev - reverse lines characterwise
문자열 출력의 순서를 반대로 한다. 한 글자 한 글자 모두 반대로 돌리므로, tac
과는 동작 방식이 약간 다르다. 예를 들어 다음과 같은 동작을 한다.
$ cat ttt.go
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.OpenFile("/dev/usb/lp0", os.O_RDWR, 0755)
if err != nil {
fmt.Println(err.Error())
os.Exit(-1)
}
defer f.Close()
f.Write([]byte("asdf"))
os.Exit(0)
}
$ rev ttt.go
niam egakcap
( tropmi
"tmf"
"so"
)
{ )(niam cnuf
)5570 ,RWDR_O.so ,"0pl/bsu/ved/"(eliFnepO.so =: rre ,f
{ lin =! rre fi
))(rorrE.rre(nltnirP.tmf
)1-(tixE.so
}
)(esolC.f refed
))"fdsa"(etyb][(etirW.f
)0(tixE.so
}
$ echo "asdf asdf " | rev
fdsa fdsa
문자열의 모든 문자를 뒤집기 때문에 라인 전체가 뒤집하는 것이 아니다. 그 문자열의 문자만 뒤집는다.
만약 완전히(문자열, 그리고 문자) 순서를 뒤집어야 한다면 다음과 같이 사용할 수 있겠다.
$ tac ttt.go | rev | rev | tac
}
)0(tixE.so
))"fdsa"(etyb][(etirW.f
)(esolC.f refed
}
)1-(tixE.so
))(rorrE.rre(nltnirP.tmf
{ lin =! rre fi
)5570 ,RWDR_O.so ,"0pl/bsu/ved/"(eliFnepO.so =: rre ,f
{ )(niam cnuf
)
"so"
"tmf"
( tropmi
niam egakcap
당연히 제대로 뒤집혔다면, 다시 뒤집었을 때 원래대로 돌아올 것이다.
$ tac ttt.go | rev | rev | tac
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.OpenFile("/dev/usb/lp0", os.O_RDWR, 0755)
if err != nil {
fmt.Println(err.Error())
os.Exit(-1)
}
defer f.Close()
f.Write([]byte("asdf"))
os.Exit(0)
}