如何在bash中反转由数字组成的字符串?

Ano*_*Awe 6 bash string shell-script

在数字中转出数字的最佳方法是什么?

例如

$ echo 123 | hook
321
$ echo 12358 | hook
85321 
Run Code Online (Sandbox Code Playgroud)

Kiw*_*iwy 11

:~> echo 123456 | rev
654321
Run Code Online (Sandbox Code Playgroud)

它应该工作。用法很简单。来自男人:

NAME
rev - 一个或多个文件的反向行

概要
修订版 [文件 ...]

描述
rev 实用程序将指定的文件复制到标准输出,颠倒每一行中的字符顺序。如果未指定文件,则读取标准输入。

如果不可用,您还应该能够使用awk

:~> echo 123456 | awk '{ for(i=length;i!=0;i--)x=x substr($0,i,1);}END{print x}'
654321
Run Code Online (Sandbox Code Playgroud)

来源unix学校

如果您最终需要完全反转文件,您可以像这样添加tacrev命令行:

tac myfile | rev 
Run Code Online (Sandbox Code Playgroud)

  • @chepner,GNU `rev` 颠倒了每一行中 _characters_ 的顺序,而不是字节,而不是组合序列。它将把 `Stéphane` 变成 `enahpétS` 而 `Stéphane` 变成 `enahṕetS`(即重音将转到 `p` 而不是 `e`) (3认同)
  • @CodesInChaos `rev` 对字节进行操作,但使用当前语言环境来解释它们。比较一些带有非 ASCII 字符的 UTF-8 编码文件的“LANG=utf8 rev file.txt”与“LANG=C rev file.txt”。使用 `utf8`,`rev` 将识别多字节 UTF-8 序列并保留它们的相对顺序。 (2认同)

Sté*_*las 6

对于那些不限于bash,与zsh

forward=123
backward=${(j::)${(Oas::)forward}}
Run Code Online (Sandbox Code Playgroud)

这些是变量扩展标志:

  • s::: 在空字符串上拆分,因此每个字符一个元素
  • Oa: 反转结果数组(O对于逆序,a对于数组下标顺序)。
  • j::: 用空字符串连接元素。