shell中拆分字符串

最近系统学习了shell编程.

看到书本里面的一个例子,很屌.之前自己也想过,但是没有得到结果.

相信同学们也猜到这个例子了,就是一行字符串的拆分.在看答案之前,同学们可以自己尝试一下.

这里我总结了三种方式.仅供参考.

1. 首先当然是书本里面的内容:

echo jalsdfjlasjdl | sed "s/[^\n]/&\n/g"

这个例子的输出就是把每个字符都单独成为一行了.

sed语句相信同学们都不陌生.唯一让人疑惑的可能就是&符号的使用.其实结合这个句子,也能够理解了.就是替代前面匹配的最小单位.[^\n]即匹配任何一个不是换行的字符.那么最小的单位自然就是单个字符.

2. 使用字符串拓展.代码如下:

#!/bin/bash

str="love you jingjing"

for i in `seq ${#str}`
do
echo ${str:$i-1;1}
done

在这段代码中,使用了大括号的拓展.第一个${#str}.代表str的长度.第二个${str:$i-1:1}意思是取str字符串的第i-1个位置的1个字符.

所以这里的打印自然也是按行打印出每个字符.这里我不知道怎么去解释为什么直接写$i-1都可以.我以为会报错.

3. 使用awk.这个是也不是完全自己的思考.也是通过借鉴资料总结的.

echo "love you jingjing " | awk -F "" ‘{for (i=1;i<=NF;i++) {print $i}}‘

其实如果真的了解awk这段代码也不是很难.难点在于我不知道""两个双引号挨着表示的就是没有分隔符,所谓没有,也就是空就是分隔符.太拗口了

理解了这个点,其它内容也就可以理解了.

是不是开始联想了.拆分成两个或以上怎么弄.

sed的方法:echo alksfdjals | sed "s/[^\n]\{2\}/&\n/g"

字符串拓展的方式:

#!/bin/bash -x

alai="love you jingjing"

for ((i=0;$i<=${#alai};i=$i+2));
do
    echo ${alai:$i:2};
done

这段代码里面使用了小括号的特殊用法,即两个小括号连着,可以随意进行运算.我个人美其名曰c语言形式.

总结了这么几个思路用了好几天,而且都不是独立思考的,都或多或少的借鉴了别人或者书本上面的思路.虽然消化了.但是未免有点缺少独立的精神.

同学们在看了这篇文章以后,有没有自己的不同的思路呢

时间: 2025-01-01 22:54:24

shell中拆分字符串的相关文章

shell中截取字符串的方法总结

shell中截取字符串的方法有很多种, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ${parameter:+word} 上面4种可以用来进行缺省值的替换. ${#parameter} 上面这种可以获得字符串的长度. ${parameter%word} 最小限度从后面截取word ${parameter%%word} 最大限度从后面截取word ${parameter#word}

Shell中的字符串操作

最近总结了一下shell中关于字符串的一些操作,希望能帮助大家更好的了解shell.在shell中也可以通过awk.sed等外部命令来操作字符串,但是调用这些外部命令处理起来与shell内置操作符的性能相差非常大,所以建议大家尽量使用内置操作符和函数来完成对字符串的操作.废话不多说,下面就来看一下shell中内置的字符串操作符和函数吧. 1.判断读取shell变量的值   表达式 含义 实例 ${var} 变量var的值,同$var [email protected]:~$ var="test&

SQL中拆分字符串substr及统计字符出现频数replace用法实例讲解

一.拆分字符串为若干行 例一:要求将表emp中的'king'按照每行一个单词拆成四行 注意:substr(str,pos):截取pos位置开始的字符: substr(str,pos,len):从pos位置开始,选出接下去的len个字符 表emp: eid ename 1 ring 2 king 3 ting 4 ping 首先,建立表tmp(基干表,为了配合表一使用): tid 1 2 3 4 5 然后,select emp.ename,tmp.tid from emp,tmp where em

Shell中判断字符串是否为数字的6种方法分享

#!/bin/bash ## 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && echo string a is numbers 第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,如果非空,则结果为真. sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要

shell中的字符串操作——字符串的切割

default.yaml {default_baseurl: 'http://10.113.10.68:8082'} test.sh a=`cat default.yaml` t=":" index=`awk -v a="$a" -v b=":" 'BEGIN{print index(a,b)}'` diff=${#a}-$index-2 let index=index+1 default_url=`echo ${a:$index:$diff}|

Shell脚本中计算字符串长度的5种方法及从文本获取某一行

有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前Shell中获取字符串的长度的多种方法,在这里分享给大家,方法如下: 方法1: 使用wc -L命令wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数. 代码如下: echo "abc" |wc -L 方法2: expr length string使用expr length可以获取string的长度 方法3: awk获取域的个数,但是如果大

shell中字符串操作

shell中的字符串:字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了,哈哈),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的 单引号字串中不能出现单引号(对单引号使用转义符后也不行) 双引号: 双引号里可以有变量 双引号里可以出现转义字符 1.拼接字符串 your_name="qinjx" greeting="hello, &quo

linux 中截取字符串

shell中截取字符串的方法有很多中,${expression}一共有9种使用方法.${parameter:-word}${parameter:=word}${parameter:?word}${parameter:+word} 上面4种可以用来进行缺省值的替换.${#parameter}上面这种可以获得字符串的长度. ${parameter%word} 最小限度从后面截取word${parameter%%word} 最大限度从后面截取word${parameter#word} 最小限度从前面截

shell中的变量功能

本地变量: set VARNAME=VALUE:作用域为整个bash进程 局部变量: local VARNAME=VALUE:作用域为当前代码段 环境变量: export VARNAME=VALUE 或者    VARNAME=VALUE                      export VARNAME 位置变量: $1   $2    ...... 特殊变量 : $? :上一条命令的执行状态返回值 程序执行,可能有两类返回值:1.程序执行结果,2程序状态返回代码(0-255),其中0是正