使用 sed 反转一行中的每个单词
Description
-----------
The job to do is reversing every word of a line.
that a word is a sequence of lowercase alphabets
Raw Input
---------
112358 is a fibonacci sequence...
a test line
124816 1392781
final line...
Desired Output
--------------
112358 si a iccanobif ecneuqes...
a tset enil
124816 1392781
lanif enil...
答案1
这个 sed 脚本可以完成这个工作:
#!/usr/bin/sed
# Put a \n in front of the line and goto begin.
s/^/\n/
bbegin
# Marker for the loop.
:begin
# If after \n is a lower case sequence, copy its last char before \n and loop.
s/\n\([a-z]*\)\([a-z]\)/\2\n\1/
tbegin
# If after \n is not a lower case sequence, copy it before \n and loop.
s/\n\([^a-z]*[^a-z]\)/\1\n/
tbegin
# Here, no more chars after \n, simply remove it before printing the new line.
s/\n//