mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-13 22:30:37 +08:00
选题: How to extract substring in Bash
This commit is contained in:
parent
e2720be7c5
commit
a517642863
153
sources/tech/20171206 How to extract substring in Bash.md
Normal file
153
sources/tech/20171206 How to extract substring in Bash.md
Normal file
@ -0,0 +1,153 @@
|
||||
translating by lujun9972
|
||||
How to extract substring in Bash
|
||||
======
|
||||
A substring is nothing but a string is a string that occurs “in”. For example “3382” is a substring of “this is a 3382 test”. One can extract the digits or given string using various methods.
|
||||
|
||||
[![How to Extract substring in Bash Shell on Linux or Unix](https://www.cyberciti.biz/media/new/faq/2017/12/How-to-Extract-substring-in-Bash-Shell-on-Linux-or-Unix.jpg)][2]
|
||||
|
||||
This quick tutorial shows how to obtain or finds substring when using bash shell.
|
||||
|
||||
### Extract substring in Bash
|
||||
|
||||
The syntax is: ## syntax ## ${parameter:offset:length} The substring expansion is a bash feature. It expands to up to length characters of the value of parameter starting at the character specified by offset. For example, $u defined as follows:
|
||||
|
||||
|
|
||||
```
|
||||
## define var named u ##
|
||||
u="this is a test"
|
||||
```
|
||||
|
|
||||
|
||||
The following substring parameter expansion performs substring extraction:
|
||||
|
||||
|
|
||||
```
|
||||
var="${u:10:4}"
|
||||
echo "${var}"
|
||||
```
|
||||
|
|
||||
|
||||
Sample outputs:
|
||||
|
||||
```
|
||||
test
|
||||
```
|
||||
|
||||
* 10 : The offset
|
||||
|
||||
* 4 : The length
|
||||
|
||||
### Using IFS
|
||||
|
||||
From the bash man page:
|
||||
|
||||
> The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is .
|
||||
|
||||
Another POSIX ready solution is as follows:
|
||||
|
||||
|
|
||||
```
|
||||
u="this is a test"
|
||||
set -- $u
|
||||
echo "$1"
|
||||
echo "$2"
|
||||
echo "$3"
|
||||
echo "$4"
|
||||
```
|
||||
|
|
||||
|
||||
Sample outputs:
|
||||
|
||||
```
|
||||
this
|
||||
is
|
||||
a
|
||||
test
|
||||
```
|
||||
|
||||
|
|
||||
```
|
||||
#!/bin/bash
|
||||
####################################################
|
||||
## Author - Vivek Gite {https://www.cyberciti.biz/}
|
||||
## Purpose - Purge CF cache
|
||||
## License - Under GPL ver 3.x+
|
||||
####################################################
|
||||
## set me first ##
|
||||
zone_id="YOUR_ZONE_ID_HERE"
|
||||
api_key="YOUR_API_KEY_HERE"
|
||||
email_id="YOUR_EMAIL_ID_HERE"
|
||||
|
||||
## hold data ##
|
||||
home_url=""
|
||||
amp_url=""
|
||||
urls="$@"
|
||||
|
||||
## Show usage
|
||||
[ "$urls" == "" ] && { echo "Usage: $0 url1 url2 url3"; exit 1; }
|
||||
|
||||
## Get home page url as we have various sub dirs on domain
|
||||
## /tips/
|
||||
## /faq/
|
||||
|
||||
get_home_url(){
|
||||
local u="$1"
|
||||
IFS='/'
|
||||
set -- $u
|
||||
echo "${1}${IFS}${IFS}${3}${IFS}${4}${IFS}"
|
||||
}
|
||||
|
||||
echo
|
||||
echo "Purging cache from Cloudflare..."
|
||||
echo
|
||||
for u in $urls
|
||||
do
|
||||
home_url="$(get_home_url $u)"
|
||||
amp_url="${u}amp/"
|
||||
curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${zone_id}/purge_cache" \
|
||||
-H "X-Auth-Email: ${email_id}" \
|
||||
-H "X-Auth-Key: ${api_key}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data "{\"files\":[\"${u}\",\"${amp_url}\",\"${home_url}\"]}"
|
||||
echo
|
||||
done
|
||||
echo
|
||||
```
|
||||
|
|
||||
|
||||
I can run it as follows: ~/bin/cf.clear.cache https://www.cyberciti.biz/faq/bash-for-loop/ https://www.cyberciti.biz/tips/linux-security.html
|
||||
|
||||
### Say hello to cut command
|
||||
|
||||
One can remove sections from each line of file or variable using the cut command. The syntax is:
|
||||
|
||||
|
|
||||
```
|
||||
u="this is a test"
|
||||
echo "$u" | cut -d' ' -f 4
|
||||
echo "$u" | cut --delimiter=' ' --fields=4
|
||||
##########################################
|
||||
## WHERE
|
||||
## -d' ' : Use a whitespace as delimiter
|
||||
## -f 4 : Select only 4th field
|
||||
##########################################
|
||||
var="$(cut -d' ' -f 4 <<< $u)"
|
||||
echo "${var}"
|
||||
```
|
||||
|
|
||||
|
||||
For more info read bash man page: man bash man cut See also: [Bash String Comparison: Find Out IF a Variable Contains a Substring][1]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.cyberciti.biz/faq/how-to-extract-substring-in-bash/
|
||||
|
||||
作者:[Vivek Gite][a]
|
||||
译者:[lujun9972](https://github.com/lujun9972)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:https://www.cyberciti.biz
|
||||
[1]:https://www.cyberciti.biz/faq/bash-find-out-if-variable-contains-substring/
|
||||
[2]:https://www.cyberciti.biz/media/new/faq/2017/12/How-to-Extract-substring-in-Bash-Shell-on-Linux-or-Unix.jpg
|
Loading…
Reference in New Issue
Block a user