linux centos7 bash中字符串反向输出

这篇具有很好参考价值的文章主要介绍了linux centos7 bash中字符串反向输出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给定一个字符串,如何反向(倒序)输出?

字符串反转的方法:a.对各个字符位置进行循环调换(从原字符串左边取出放在新字符串的右边;从原字符串右边取出放在新字符串的左边)。b.对各个字符由水平排列转为垂直排列(行变列),tac反转,再由垂直排列转为水平排列(列变行)。

由行变列的方法有:grep、sed、awk、xargs等。由列变行主要有sed、awk、tr等。

xargs只能把空格分隔的行转为列。可以通过sed、awk等方法为字符串各字符间添加空格。

训练项目很简单,解决方法也很多,我们共同讨论。

一、rev命令

该命令接受文件作参数,也接受标准输入。

1.基本语法

命令格式

        rev [OPTION] [FILE...]

如果没有指定文件,则读取标准输入。

选项说明

-V, --version显示版本信息并退出

-h, --help显示帮助信息并退出

标准输入格式

        echo "string" |rev

rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。

与其他命令结合时表示将其收到的其他命令执行的结果以字符串为单位进行倒序输出。

2.常用示例

给定文件rev_ test.txt 用于测试,内容如下:

        abcde

        12345

a.来自文件

反序显示文件的每行内容

        rev rev_test.txt

        edeba

        54321

b.来自标准输入

反序显示从标准输入读取的内容

        rev

        hello

        olleh

每输入一行内容后,键入回车将显示反序后的内容

键入 Ctrl + d 结束输入

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

标准输入的另一写法:

        rev <<< $'12345'

        rev <<< 12345

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

二、变量应用

把给定字符串定义为一个变量,利用其特性,反向输出:

        var="ABCD";len=${#var};for((i=$len;i>=0;i--)); do echo -e "${var:$i:1}\c";done;echo

len=${#var} # 获取字符串长度

echo -e "${var:$i:1}\c"中-e是开启转义 \c取消echo的换行

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

三、sed命令

1.替换字符间分隔符

把每个字符后添加一个换行符,通过tac反转,再把多行转为单行(不能有空格)

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

PS:

a.应用sed为字符串间添加空格

        sed 's/./& /g' filename

b.应用sed把字符串转行为列

        sed 's/./&\n/g' filename

c.应用sed把字符串转列为行

        sed ':a;$!N;s/\n//g;ba' filename

        sed ':a;N;s/\n//g;ta' filename

2.分组反向引用

        echo 'ABC'|sed 's/\(.\)\(.\)\(.\)\/\3\2\1/g'

        echo 'ABC'|sed -r 's/(.)(.)(.)/\3\2\1/'linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

(.)  正则表达式中的分组匹配,匹配之后再用具体位置参数 \4\3\2\1来实现反转

-r 使用-r参数,表示扩展正则表达式,就不用使用\来进行转义

3.普通方法

a.应用G D s

        echo '123456789'|sed -r '/\n/!G;s/(.)(.*\n)/&\2\1/;//D;s/.//'

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

b.应用x H s

        echo 123456|sed $'s/./&\\\n/g' | sed -ne $'x;H;${x;s/\\n//g;p;}'

工作原理是首先将输入字符串分成每个字符一行,然后将每个字符插入保持缓冲区的开头。

x交换保持空间和模式空间,并且 H将(当前)模式空间附加到保持空间。

因此,对于每个角色,我们将该角色放入保持空间,然后将旧的保持空间附加到其中,从而反转输入。最后一个命令删除换行符以重建原始字符串。

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

c.应用 G h s

        echo abcdefgh|sed 's/./&\n/g'|sed -n $'1!G;h;$!d;s/\\n//g;p'

熟悉应用sed命令使用文件倒序输出的,对此命令较易理解。参考文章:linux centos7文件倒序与功能实现

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

不加-n选项,不加p操作

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

四、awk命令

1.设置分隔符方法

通过设置内置变量FS、OFS及ORS,达到反向输出

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

2.应用子串截取方法

        echo ABCD|awk '{for(i=1;i<=length;i++) {line=substr($0,i,1) line}} END{print line}'

        a.substr($0,i,1)表示取当前字符从索引i开始,取当前位

        b.length 为当前字符串的长度

        c.line=substr($0,i,1) line将三个值分别保存在内存栈中

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

3.设置分隔符方法

        echo "dsfedw" | awk 'BEGIN{FS = ""}{for(i = NF; i >= 1; i--) {printf("%s", $i)}{printf("\n")}}'

        wdefsd   ## 反向输出

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

五、常用命令组合

把常用命令进行简单的组合,可以达到反转字符串。

各种命令组合将产生较多方法,我们仅介绍一部分。

1.grep

        echo '!!!esreveR si sihT' | grep -o . | tac | tr -d '\n' ; echo

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

2.fold

        echo '!!!esreveR si sihT'|fold -w 1|tac|tr -d '\n';echo

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

3.xxd

转换为十六进制值然后反转

        echo '!!!esreveR si sihT' | xxd -p | grep -o .. | tac | xxd -r -p echo

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

4.tr

        tr命令可以设置选项-d '',"\n"。

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

六、Python

echo  ABCD|python -c 'print raw_input()[::-1]'

1.[::-1]  实现字符串的反转

2.-c commond  表示运行时以命令性字符串提交python脚本

3.raw_input()  将管道传过来的值作为字符串输入

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

七、perl

echo  ABCD | perl -nle 'print scalar reverse $_'

1.print scalar reverse $_ 将管道传过来的字符串传到默认标量$_,再用reverse取反

2.-e让Perl程序可以在Perl命令行中运行,比如: perl -e 'print "Hello,World!\n"'

3.-n增加了循环功能,可以一行行处理文本

4.-l用来给每行增加一个换行符"\n"

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

八、bash实现

linux 中bash实现字符串的反向输出方法很多,仅介绍部分。

1. 字符右切片方法

#!/bin/bash

#guo 2023.8.26

#使用read读入一段字符串,最后以倒序的方式打印出这一段字符串

echo -e "\e[33;1mQuit program when input is empty.\e[m"   # 前面的“\e[33;1m”和后面的“\e[m”为一组,设置文字颜色

while :

do

        read -p "Please input a string: " str

        if [ "$str" = "" ];then  # 当什么都不输的时候则退出程序

                echo "bye~"

                exit

        fi

        len=${#str}   # 获得输入的字符长度        

        res=""    # 清空字符串变量

         for ((i=$len;i>=0;i--))

         do

                  res=$res${str:$i:1}   # 利用字符切片从后往前一次取出一个字符并连接

        done

        echo "$res"

done

本方法是利用字符切片从后往前依次取出一个字符并组合成一新的字符串。最后直接输出这个新的字符串。

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

2.字符左切片方法

#!/bin/bash

#guo 2023.8.26

#使用read读入一段字符串,最后以倒序的方式打印

echo -e "\033[32;1mPlease enter 'q' to exit the program.\033[m"

var="12345" 

rev=""

for (( i=0 ; i<${#var} ; i++ )); do rev="${var:i:1}$rev"; done

echo "var: $var, rev: $rev"

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

3.REPLY方法

        echo ABCD | { read; for((i=${#REPLY};i>0;i--)) do echo -n ${REPLY:i-1:1};done;echo; }

linux centos7 bash中字符串反向输出,bash,linux,服务器,centos,学习,c语言,开发语言

本方法未提前设置变量,直接利用REPLY处理(已将变量的值从标准输入读到REPLY)。

$REPLY:当没有参数变量提供给read命令的时候,这个变量会作为默认变量提供给read命令。

小结

字符串反向输出是每一种高级语言都涉及到的重要操作。这是检验高级语言处理基本问题的常用功能是否健壮,处理手法是否灵活多样。

一个简单的字符串反向输出关注的知识点包括:循环结构、分支结构,从此案例引导的命令学习,是对grep、sed、awk、tr、tac和变量的深入理解与灵活应用。文章来源地址https://www.toymoban.com/news/detail-684911.html

到了这里,关于linux centos7 bash中字符串反向输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字符串倒序输出

    近期面试有这样一个问题,给定一个字符串,将其倒序输出,这种问题乍一看很好处理,但是实际在写的时候不知道怎么写了,有思路,但是没写出来。记录一下。 字符串反转实现的方式有多种,本质思想是将两端的数据进行对调,这个需要关系到二分法。 计算字符串总长

    2024年01月19日
    浏览(31)
  • 字符串的输入输出

    2024年01月19日
    浏览(27)
  • C语言学习:输入一行字符串,输出字符串中最长的单词。

    输入一行字符,编写一个函数,将此字符串中最长的单词输出。 代码示例如下: 一、输出字符串中第一个最长单词 测试结果:  二、输出字符串中所有最长单词 评论区指出上述程序不能输出同样最长的两个单词,修改后该程序能输出所有最长单词,即如果有多个同样最长的

    2024年02月05日
    浏览(37)
  • C语言字符和字符串的输入与输出

    1、scanf函数输入单个字符 C语言scanf输入时缓冲区问题 scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括在键盘输入的空格、回车这类字符,当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在\\\"%c\\\"输入时,空格和转义字符均作

    2023年04月09日
    浏览(61)
  • C语言-字符串与输入输出

    在 C 语言中,字符串实际上是使用空字符 \\0 结尾的一维字符数组。因此,\\0 是用于标记字符串的结束。 空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。 比如:下面声明和初始化创建

    2024年02月02日
    浏览(36)
  • C++ puts()函数(输出简单字符串)

    C++中的 puts() 函数是用来输出字符串的函数,它的原型如下: 其中, str 是要输出的字符串, puts() 函数会自动在字符串末尾添加一个换行符 n ,并将其输出到标准输出流(即屏幕)上。 相比于 cout 输出流, puts() 函数的优点是简单易用,不需要像 cout 一样需要使用 运算符来

    2024年02月05日
    浏览(36)
  • 【Haxe】(二)字符串与变量的输入输出

    每次学习一门新语言,各种手册和教程一上来就是讲变量如何定义,数据结构怎么用,很少有讲输入输出应该怎么写的。我比较喜欢先搞懂这部分,这让我感觉像是掌握了学习主动权,很能调动我的学习积极性。于是我的第一篇笔记就打算记录 Haxe 语言的输入输出语句怎么使

    2024年02月07日
    浏览(24)
  • 编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。

    题目: 编写一个函数 ,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数, 在主函数中输入字符串以及输出上述的结果。 根据题目要求,来编写程序。 首先,确定主函数部分。其中d=digit数字、s=space空格、l=letter字母、o=other其他字符。 注意:因

    2024年02月04日
    浏览(54)
  • Java:JSONObject.toJSONString输出字符串内容处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 JSONObject可以将Java对象转换成JSON流输出,进行数据显示或者数据交互的时候很好用。 但是JSONObject.toJSONString输出的字符串往往有以下几个格式问题: 1.Java中的 String 类型输出的时候含有双引号(“”)

    2024年02月03日
    浏览(26)
  • 考研算法38天:反序输出 【字符串的翻转】

    很简单的一道题,但是还是有收获的,我发现我连scanf的字符串输入都忘记咋用了。。。。。我一开始写的 结果发现咋搞都编译错误,查别人的博客发现别人和自己一样,最后就问了chat果然是自己记错了。。。。。。 好吧,哈哈哈哈哈。 事实证明scanf和printf是要比cin和cout快

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包