MOH*_*MED 14 linux shell awk sed ash
我有一个字符串中的单词列表:
str="SaaaaE SeeeeE SbbbbE SffffE SccccE"
Run Code Online (Sandbox Code Playgroud)
我想扭转它以获得
"SccccE SffffE SbbbbE SeeeeE SaaaaE"
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做ash?
Lar*_*ara 18
您可以使用awk如下:
echo "$str" | awk '{ for (i=NF; i>1; i--) printf("%s ",$i); print $1; }'
Run Code Online (Sandbox Code Playgroud)
Sky*_*net 13
是的,您可以尝试这些命令,
对于字符串,
echo "aaaa eeee bbbb ffff cccc"|tr ' ' '\n'|tac|tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
对于变量,
echo $str|tr ' ' '\n'|tac|tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
对于那些想要一个简单且不复杂的单行解决方案的人来说,tac是最佳选择。tac这是我知道的使用和命令替换的最简单方法:
echo $(tac -s ' ' <<< $str)
Run Code Online (Sandbox Code Playgroud)
你可以使用awk:
echo "aaaa eeee bbbb ffff cccc" | awk '{for(i=NF;i>0;--i)printf "%s%s",$i,(i>1?OFS:ORS)}'
Run Code Online (Sandbox Code Playgroud)
向后循环穿过字段,打印每个字段.OFS是输出字段分隔符(默认为空格),ORS是输出记录分隔符(换行符).
我假设你不希望每个单词中的字母顺序颠倒过来.
如果您需要纯外壳,没有外部工具,请考虑:
reverse_word_order() {
local result=
for word in $@; do
result="$word $result"
done
echo "$result"
}
reverse_word_order "$str"
Run Code Online (Sandbox Code Playgroud)
否则tac可以立即帮助您:
echo -n "$str" | tac -s' '
Run Code Online (Sandbox Code Playgroud)
或者
tac -s' ' <<<"$str" | xargs
Run Code Online (Sandbox Code Playgroud)
这是一个awkusing do while(在 Stackoverflow 上没有太多使用)
不需要额外的变量i
echo "aaaa eeee bbbb ffff cccc"|awk '{do printf "%s"(NF>1?FS:RS),$NF;while(--NF)}'
cccc ffff bbbb eeee aaaa
Run Code Online (Sandbox Code Playgroud)