`

Bash字符串处理(与Java对照) - 29. 字符串翻转

阅读更多

Bash字符串处理(与Java对照) - 29.字符串翻转(字符串反转、字符串反序)

In Java

StringBuilder.reverse || StringBuffer.reverse

 

StringBuffer sb = new  StringBuffer(str);

String str2 = sb.reverse().toString();

 

In Bash

编写一个Bash函数来实现字符串翻转

格式:strrev "$STR"

 

strrev(){
    local src=$1
    local len=${#src}
    local i
    local dst
    for ((i=len-1; i>=0; --i)) {
        dst="$dst${src:i:1}"
    }
    echo "$dst"
}

 

[root@jfht ~]# STR=12345

[root@jfht ~]# strrev "$STR"
54321
[root@jfht ~]#

尝试一个多行文本。

[root@jfht ~]# STR="12345
> hello"
[root@jfht ~]# strrev "$STR"
olleh
54321
[root@jfht ~]#

 

使用外部命令rev来实现字符串翻转

格式:echo "$STR" | rev

格式:rev <<< "$STR"

注意:rev命令是把每行文本进行翻转。

 

man rev 写道
NAME
     rev - reverse lines of a file

SYNOPSIS
     rev [file]

DESCRIPTION
     The rev utility copies the specified files to the standard output, reversing the order of characters in every
     line.  If no files are specified, the standard input is read.
 

[root@jfht ~]# echo "12345" | rev
54321

[root@jfht ~]# rev <<<"12345"
54321

[root@jfht ~]# STR=12345
[root@jfht ~]# echo "$STR" | rev
54321
[root@jfht ~]# rev <<< "$STR"
54321
[root@jfht ~]#

尝试一个多行文本。

[root@jfht ~]# STR="12345
> hello"
[root@jfht ~]# strrev "$STR"
olleh
54321
[root@jfht ~]# echo "$STR" | rev
54321
olleh
[root@jfht ~]# rev <<<"$STR"
54321
olleh
[root@jfht ~]#

 

使用rev和tac命令实现字符串翻转

格式:echo "$STR" | tac | rev

格式:echo "$STR" | rev | tac

 

man tac 写道
NAME
       tac - concatenate and print files in reverse

SYNOPSIS
       tac [OPTION]... [FILE]...

DESCRIPTION
       Write each FILE to standard output, last line first.  With no FILE, or when FILE is -, read standard input.
 

[root@jfht ~]# STR="12345
> hello"
[root@jfht ~]# echo "$STR" | tac | rev
olleh
54321
[root@jfht ~]# echo "$STR" | rev | tac
olleh
54321
[root@jfht ~]#

 

使用awk命令实现字符串翻转

格式:echo "$STR" | awk -F "" '{for(i=NF;i>0;i--)print $i}'

格式:awk -F "" '{for(i=NF;i>0;i--)print $i}' <<<"$STR"

 

 

使用sed命令实现字符串翻转

# 将行中的字符逆序排列,第一个字成为最后一字,……(模拟“rev”)

来自:http://bbs.chinaunix.net/viewthread.php?tid=859821&extra=&page=1

格式:echo "$STR" | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

格式:sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' <<<"$STR"

 

[root@jfht ~]# echo "12345" | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
54321
[root@jfht ~]# STR=12345
[root@jfht ~]# echo "$STR" | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
54321
[root@jfht ~]# STR="12345
> hello"
[root@jfht ~]# echo "$STR" | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
54321
olleh
[root@jfht ~]# sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' <<<"$STR"
54321
olleh
[root@jfht ~]#

 

 

本文链接:http://codingstandards.iteye.com/blog/1164916   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

上节内容:Bash字符串处理(与Java对照) - 28.去除前后空白

下节内容:Bash字符串处理(与Java对照) - 30.综合实例:自动生成版本号源文件

 

4
3
分享到:
评论
1 楼 tim_ubuntu 2011-11-09  
good,学习了~

相关推荐

    mysql-connector-java-5.1.40.tar.gz

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了JDBC(Java Database Connectivity)标准的MySQL驱动程序。"mysql-connector-java-5.1.40.tar.gz" 是这个驱动程序的一个特定版本,版本号为...

    bash-3.1-MSYS-1.0.11-snapshot.tar

    bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 ffmpeg 安装用包!

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar

    gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.tar是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译64-bit Armv8 Cortex-A, little-endian目标中的裸机程序、u-boot、Linux kernel、...

    libaio-devel-0.3.105-2.x86_64.rpm

    《Linux系统中的libaio与Oracle数据库安装》 在Linux操作系统环境下,安装和配置Oracle数据库是一项重要的任务,而libaio库则是Oracle数据库系统不可或缺的一部分。libaio,全称是"Linux Asynchronous I/O",是...

    HDP-GPL-3.1.4.0-centos7-gpl.tar.gz

    标题 "HDP-GPL-3.1.4.0-centos7-gpl.tar.gz" 提供的信息表明,这是一个与HDP(Hortonworks Data Platform)相关的开源版本,版本号为3.1.4.0,是为CentOS 7操作系统设计的。HDP是一个基于Apache Hadoop的全面数据平台...

    docker-ce-18.06.1.ce-3.el7.x86-64 yum 离线安装

    ```bash yum install -y yum-utils device-mapper-persistent-data lvm2 ``` 4. **安装 Docker CE**:现在,你可以安装 Docker CE 18.06.1.ce 了。执行: ```bash yum install -y docker-ce-18.06.1.ce-3.el7....

    yum-3.2.29-40.el6.centos.noarch.rpm和yum-3.2.29-30.el6.noarch.rpm

    本文将深入探讨`yum`以及与标题和描述相关的两个版本`yum-3.2.29-40.el6.centos.noarch.rpm`和`yum-3.2.29-30.el6.noarch.rpm`。 首先,`yum`的核心功能在于自动化处理RPM包之间的依赖关系。当用户尝试安装一个...

    container-selinux-2.9-4.el7.noarch.rpm.zip

    `container-selinux-2.9-4.el7.noarch.rpm.zip`这个压缩包文件是与Docker相关的,它包含了一个名为`container-selinux-2.9-4.el7.noarch.rpm`的软件包,这是Docker在Red Hat Enterprise Linux 7 (RHEL 7)或其兼容...

    libaio-devel-0.3.106(i386 x86_64)

    ```bash rpm -ivh libaio-devel-0.3.106-3.2.i386.rpm ``` 而对于 x86_64 系统,则是: ```bash rpm -ivh libaio-devel-0.3.106-3.2.x86_64.rpm ``` 安装完成后,libaio-devel 提供的头文件(如 `libaio.h`)和开发...

    离线安装tar命令 tar-1.30-5.el8.x86-64.rpm

    在Linux操作系统中,`tar`命令是一个非常基础且重要的工具,用于处理档案文件。它能够创建、解压、查看和管理归档文件。在没有网络连接或者需要在多台机器间快速部署相同软件环境的情况下,离线安装`tar`命令就显得...

    Git-2.29.2.2-64-bit.exe安装包

    4. **选择组件**:在自定义安装中,你可以选择是否安装Git Bash(提供一个类似Linux命令行的环境)、Git GUI(图形用户界面)和其他可选工具。此外,还可以决定是否在右键菜单中添加Git命令,方便快速执行Git操作。 ...

    make-3.81.90-msys.rar

    MSYS是Windows上模拟Unix-like环境的工具集,它允许开发者在Windows下运行许多基于POSIX的命令行工具,如`bash`、`gcc`等。`make-3.81.90-msys`是`make`在MSYS环境下的移植版,确保了开发者能在Windows环境中享受到...

    Git-2.27.0-64-bit.rar

    在安装Git-2.27.0-64-bit.exe文件时,用户可以选择自定义安装路径、设置默认文本编辑器、选择是否使用Git Bash作为系统默认的Shell,以及是否在右键菜单中添加Git命令等。安装完成后,用户可以通过系统环境变量配置...

    mysql-server-5.1.66-2.el6_3.x86_64 安装包

    另一个包含的文件“mysql-connector-java-5.1.17-6.el6.noarch.rpm”是MySQL的Java连接器,它允许Java应用程序通过JDBC(Java Database Connectivity)API与MySQL服务器进行通信。这个驱动程序对于开发基于Java的Web...

    mysql-8.0.31安装包

    了解如何正确地安装和配置这些RPM包对于任何IT专业人员来说都是至关重要的,特别是在处理与数据存储和处理相关的项目时。通过熟练掌握这些技能,你可以确保数据库系统的稳定运行,从而支持业务的高效运作。

    redis集群离线安装包。redis-3.2.1.gem,rubygems-2.4.2.zip

    5. **客户端连接**:客户端连接到集群时,需要使用支持Redis集群的客户端库,如Jedis(Java)、StackExchange.Redis(C#)等,它们会处理槽的路由和重定向。 6. **监控与维护**:定期检查集群状态,使用`CLUSTER ...

    tftp-server-0.42-3.1.i386.rpm.

    《TFTP服务器在RHEL5系统中的应用与配置详解》 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种轻量级的文件传输协议,常用于设备初始化、固件更新、网络诊断等场景。在RHEL5(Red Hat Enterprise...

    compat-libcap1-1.10-7.el7.x86_64.rpm

    在IT行业中,兼容性库和依赖管理是操作系统与软件安装过程中的重要环节。"compat-libcap1-1.10-7.el7.x86_64.rpm" 是一个针对Oracle 12c数据库安装所需的特定Linux兼容性库。这个RPM(Red Hat Package Manager)包...

    Git-2.35.1.2-64-bit.rar

    5. Git LFS(Large File Support):可选组件,用于处理大文件,避免将它们存储在版本库中。 安装过程中,用户可以根据需求选择配置选项,如设置默认文本编辑器、选择是否使用SSH协议、自定义Git路径等。安装完成后...

    python2.7中所用的get-pip.py文件+安装方法

    ```bash python get-pip.py ``` 运行此命令后,`get-pip.py`会检查你的Python环境,并安装或更新`pip`。这个过程可能需要一段时间,因为`pip`会下载并安装其所有依赖。 在安装过程中,你可能需要管理员权限,特别...

Global site tag (gtag.js) - Google Analytics