[英]Bash: How to tokenize a string variable?
如果我有一個字符串變量,其值是"john is 17 years old"
,我如何使用空格作為分隔符來標記它? 我會用awk
嗎?
$ string="john is 17 years old"
$ tokens=( $string )
$ echo ${tokens[*]}
對於其他分隔符,例如';'
$ string="john;is;17;years;old"
$ IFS=';' tokens=( $string )
$ echo ${tokens[*]}
使用shell對未加引號的變量進行自動標記:
$ string="john is 17 years old"
$ for word in $string; do echo "$word"; done
john
is
17
years
old
如果要更改分隔符,可以設置$IFS
變量,該變量代表內部字段分隔符。 $IFS
的默認值是" \\t\\n"
(空格,制表符,換行符)。
$ string="john_is_17_years_old"
$ (IFS='_'; for word in $string; do echo "$word"; done)
john
is
17
years
old
(請注意,在第二個示例中,我在第二行附近添加了括號。這會創建一個子shell,因此$IFS
的更改不會持續存在。您通常不希望永久更改$IFS
因為它可能會造成嚴重破壞毫無疑問的shell命令。)
$ string="john is 17 years old"
$ set -- $string
$ echo $1
john
$ echo $2
is
$ echo $3
17
你可以嘗試這樣的事情:
#!/bin/bash
n=0
a=/home/file.txt
for i in `cat ${a} | tr ' ' '\n'` ; do
str=${str},${i}
let n=$n+1
var=`echo "var${n}"`
echo $var is ... ${i}
done
與POSIX擴展正則表達式:
$ str='a b c d'
$ echo "$str" | sed -E 's/\W+/\n/g' | hexdump -C
00000000 61 0a 62 0a 63 0a 64 0a |a.b.c.d.|
00000008
這就像python的re.split(r'\\W+', str)
\\W
匹配非單詞字符,
包括空格,制表符,換行符,返回,[像標記器的bash for
一樣]
還包括引號,括號,符號等符號......
......除了下划線標志_
,
所以snake_case
是一個單詞,但snake_case
kebab-case
是兩個單詞。
前導和尾隨空格將創建一個空行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.