簡體   English   中英

Bash:如何標記字符串變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM