|
|
|
|
挪动端

怎样在Bash中抽取子字符串

所谓“子字符串”便是呈现在别的字符串内的字符串。 比方 “3382” 便是 “this is a 3382 test” 的子字符串。 本文会向你展现在 bash shell 中怎样获取或许说查找出子字符串。

作者:Vivek Gite泉源:通博8888官网中国|2017-12-11 13:50

年前最初一场技能盛宴 | 1月27日与京东、日记易技能大咖畅聊智能化运维开展趋向!


所谓“子字符串”便是呈现在别的字符串内的字符串。 比方 “3382” 便是 “this is a 3382 test” 的子字符串。 我们有多种办法可以从中把数字或指定局部字符串抽取出来。

How to Extract substring in Bash Shell on 通博8888官网 or Unix

How to Extract substring in Bash Shell on 通博8888官网 or Unix

本文会向你展现在 bash shell 中怎样获取或许说查找出子字符串。

在 Bash 中抽取子字符串

其语法为:

  1. ## 款式 ##
  2. ${parameter:offset:length}

子字符串扩展是 bash 的一项功用。它会扩展成 parameter 值中以 offset 为开端,长为 length 个字符的字符串。 假定, $u 界说如下:

  1. ## 界说变量 u ##
  2. u="this is a test"

那么上面参数的子字符串扩展会抽取出子字符串:

  1. var="${u:10:4}"
  2. echo "${var}"

后果为:

  1. test

此中这些参数辨别表现:

  • 10 : 偏移地位
  • 4 : 长度 

运用 IFS

依据 bash 的 man 页阐明:

IFS (外部字段分开符)用于在扩展落伍行单词联系,并用内建的 read 下令将行联系为词。默许值是。

另一种 POSIX 停当POSIX ready的方案如下:

  1. u="this is a test"
  2. set -- $u
  3. echo "$1"
  4. echo "$2"
  5. echo "$3"
  6. echo "$4"

输入为:

  1. this
  2. is
  3. a
  4. test

上面是一段 bash 代码,用来从 Cloudflare cache 中去除带主页的 url。

  1. #!/bin/bash
  2. ####################################################
  3. ## Author - Vivek Gite {https://www.cyberciti.biz/}
  4. ## Purpose - Purge CF cache
  5. ## License - Under GPL ver 3.x+
  6. ####################################################
  7. ## set me first ##
  8. zone_id="YOUR_ZONE_ID_HERE"
  9. api_key="YOUR_API_KEY_HERE"
  10. email_id="YOUR_EMAIL_ID_HERE"
  11.  
  12. ## hold data ##
  13. home_url=""
  14. amp_url=""
  15. urls="$@"
  16.  
  17. ## Show usage
  18. [ "$urls" == "" ] && { echo "Usage: $0 url1 url2 url3"; exit 1; }
  19.  
  20. ## Get home page url as we have various sub dirs on domain
  21. ## /tips/
  22. ## /faq/
  23.  
  24. get_home_url(){
  25. local u="$1"
  26. IFS='/'
  27. set -- $u
  28. echo "${1}${IFS}${IFS}${3}${IFS}${4}${IFS}"
  29. }
  30.  
  31. echo
  32. echo "Purging cache from Cloudflare。.。"
  33. echo
  34. for u in $urls
  35. do
  36. home_url="$(get_home_url $u)"
  37. amp_url="${u}amp/"
  38. curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${zone_id}/purge_cache"
  39. -H "X-Auth-Email: ${email_id}"
  40. -H "X-Auth-Key: ${api_key}"
  41. -H "Content-Type: application/json"
  42. --data "{"files":["${u}","${amp_url}","${home_url}"]}"
  43. echo
  44. done
  45. echo

它的运用办法为:

  1. ~/bin/cf.clear.cache https://www.cyberciti.biz/faq/bash-for-loop/ https://www.cyberciti.biz/tips/linux-security.html 

借助 cut 下令

可以运用 cut 下令来将文件中每一行或许变量中的一局部删失。它的语法为:

  1. u="this is a test"
  2. echo "$u" | cut -d' ' -f 4
  3. echo "$u" | cut --delimiter=' ' --fields=4
  4. ##########################################
  5. ## WHERE
  6. ## -d' ' : Use a whitespace as delimiter
  7. ## -f 4 : Select only 4th field
  8. ##########################################
  9. var="$(cut -d' ' -f 4 <<< $u)"
  10. echo "${var}"

想理解更多请阅读 bash 的 man 页:

  1. man bash
  2. man cut

另请拜见: Bash String Comparison: Find Out IF a Variable Contains a Substring

【编辑引荐】

  1. 我想装通博8888官网操纵零碎,但是为什么总无法辨认硬盘啊?
  2. 怎样在通博8888官网零碎里用Scrot截屏
  3. 在通博8888官网启动或重启时实行下令与剧本
  4. 怎样在通博8888官网上装置敌对的交互式shell:Fish
  5. 怎样在通博8888官网上装置Google Chrome 63
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
各人都在看
猜你喜好
24H热文
一周话题
本月最赞

读 书 +更多

及时UML与Rational Rose RealTime建模案例分析

本书将及时零碎、及时一致建模言语、及时零碎的一致开辟进程和Rational Rose RealTime建模情况无机地联合起来,以案例为根底,零碎地引见了...

订阅51CTO邮刊

点击这里检查样刊

订阅51CTO邮刊