shell - 在 shell 字符串中,linux如何反转单词列表?

  显示原文与译文双语对照的内容
82 1

我有一个字符串中的单词列表:

str="SaaaaE SeeeeE SbbbbE SffffE SccccE"

我想把它颠倒过来

"SccccE SffffE SbbbbE SeeeeE SaaaaE"

我如何使用 ash

时间:原作者:0个回答

82 3

你可以按如下方式使用 awk:

echo $str | awk '{ for (i=NF; i>1; i--) printf("%s",$i); print $1; }'
原作者:
123 4

是,你可以尝试这些命令,

对于字符串

echo"aaaa eeee bbbb ffff cccc"|tr ' ' 'n'|tac|tr 'n' ' '

对于英镑可变的,

echo $str|tr ' ' 'n'|tac|tr 'n' ' '
原作者:
59 2

你可以使用 awk:

echo"aaaa eeee bbbb ffff cccc" | awk '{for(i=NF;i>0;--i)printf"%s%s",$i,(i>1?OFS:ORS)}'

在各个字段之间来回循环,打印每个字段。OFS 是输出字段分隔符( 默认情况下的空间),ORS 是输出记录分隔符( 换行符) 。

我假设你不希望每个单词中的字母顺序被反转。

原作者:
126 1

下面是使用 dowhileawk ( 在Stackoverflow中使用不多)
不需要额外的变量 i

echo"aaaa eeee bbbb ffff cccc"|awk '{do printf"%s"(NF>1?FS:RS),$NF;while(--NF)}'
cccc ffff bbbb eeee aaaa
原作者:
116 0

如果你需要纯 shell,没有外部工具,请考虑以下事项:

reverse_word_order() {
 local result=
 for word in $@; do
 result="$word $result"
 done
 echo"$result" 
}
reverse_word_order"$str"

否则 tac 可以帮助你:

echo -n"$str" | tac -s' '

或者

tac -s' ' <<<"$str" | xargs 
原作者:
...