如果我有一个字符串变量,它的值是"john is 17 years old",我该如何使用空格作为分隔符来标记它呢?我会使用awk吗?
"john is 17 years old"
awk
0kjbasz61#
$ string="john is 17 years old" $ tokens=( $string ) $ echo ${tokens[*]}
对于其他分隔符,如';'
$ string="john;is;17;years;old" $ OLDIFS="$IFS" $ IFS=';' tokens=( $string ) $ echo ${tokens[*]} $ IFS="$OLDIFS" # restore IFS
uplii1fm2#
使用shell对未加引号的变量进行自动标记:
$ string="john is 17 years old" $ for word in $string; do echo "$word"; done john is 17 years old
如果要更改分隔符,可以设置$IFS变量,它代表内部字段分隔符。$IFS的默认值为" \t\n"(空格、制表符、换行符)。
$IFS
" \t\n"
$ string="john_is_17_years_old" $ (IFS='_'; for word in $string; do echo "$word"; done) john is 17 years old
(Note在第二个例子中,我在第二行加上了括号,这样就创建了一个子shell,这样对$IFS的更改就不会持久。通常,您不希望永久更改$IFS,因为它可能会对不知情的shell命令造成严重破坏。)
20jt8wwn3#
$ string="john is 17 years old" $ set -- $string $ echo $1 john $ echo $2 is $ echo $3 17
atmip9wb4#
您可以尝试以下操作:
# !/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
jutyujz05#
使用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是一个字,但是kebab-case是两个字。前导空格和尾随空格将创建空行。
re.split(r'\W+', str)
\W
bash for
_
snake_case
kebab-case
5条答案
按热度按时间0kjbasz61#
对于其他分隔符,如';'
uplii1fm2#
使用shell对未加引号的变量进行自动标记:
如果要更改分隔符,可以设置
$IFS
变量,它代表内部字段分隔符。$IFS
的默认值为" \t\n"
(空格、制表符、换行符)。(Note在第二个例子中,我在第二行加上了括号,这样就创建了一个子shell,这样对
$IFS
的更改就不会持久。通常,您不希望永久更改$IFS
,因为它可能会对不知情的shell命令造成严重破坏。)20jt8wwn3#
atmip9wb4#
您可以尝试以下操作:
jutyujz05#
使用POSIX扩展正则表达式:
这就像python的
re.split(r'\W+', str)
\W
匹配非单词字符,包括空格、制表符、换行符、回车符[类似于
bash for
标记器]还包括引号、括号、符号等符号。
......除了下划线符号
_
,所以
snake_case
是一个字,但是kebab-case
是两个字。前导空格和尾随空格将创建空行。