[关闭]
@xtccc 2018-05-09T06:41:35.000000Z 字数 1222 阅读 1811

处理String

给我写信
GitHub

此处输入图片的描述

Shell



目录


1. Split


1.1 按照单个字符切分

  1. #!/bin/bash
  2. str="hello.world.hello.shell"
  3. IFS="."
  4. arr=($str)
  5. for i in "${!arr[@]}"; do
  6. token=${arr[$i]}
  7. echo "$i $token";
  8. done

运行结果:
image_1at5nsmmrt1susp4do3oh91em.png-7.3kB


1.2 按照多字符切分

按照多字符切分字符串不能通过设置IFS来实现

参考 Bash Split String

  1. ########################################
  2. ## https://www.tutorialkart.com/bash-shell-scripting/bash-split-string/
  3. ## 对str按照delimiter进行切分
  4. ## 返回第index个token (index从0开始)
  5. #########################################
  6. split() {
  7. local str="$1"
  8. local delimiter="$2"
  9. local index="$3"
  10. local s=$str$delimiter
  11. array=();
  12. while [[ $s ]]; do
  13. array+=( "${s%%"$delimiter"*}" );
  14. s=${s#*"$delimiter"};
  15. done;
  16. # declare -p array
  17. # echo $index
  18. echo ${array[$index]}
  19. }
  20. result=$(split "LearnABCtoABCSplitABCaABCString" "ABC" 2)
  21. echo $result




2. 替换




3. 查找


3.1 查找指定的某几行

3.1.2查找stdout的某几行

例如,对于free命令:

  1. tao@cas-01-prod:~/tao$ free
  2. total used free shared buffers cached
  3. Mem: 15404784 15317124 87660 0 6696 6663804
  4. -/+ buffers/cache: 8646624 6758160
  5. Swap: 0 0 0



如果只想保留输出的第3行:

  1. tao@cas-01-prod:~/tao$ free | sed -n 3p
  2. -/+ buffers/cache: 8646200 6758584



如果只想保留它输出的第2~3行:

  1. tao@cas-01-prod:~/tao$ free | sed -n 2,3p
  2. Mem: 15404784 15331088 73696 0 6696 6678736
  3. -/+ buffers/cache: 8645656 6759128



如果想保留第1行、第4行:

  1. tao@cas-01-prod:~/tao$ free | sed -n -e 1p -e 4p
  2. total used free shared buffers cached
  3. Swap: 0 0 0



添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注