linux Bash:如何标记一个字符串变量?

ogsagwnx  于 2022-11-02  发布在  Linux
关注(0)|答案(5)|浏览(123)

如果我有一个字符串变量,它的值是"john is 17 years old",我该如何使用空格作为分隔符来标记它呢?我会使用awk吗?

0kjbasz6

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
uplii1fm

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"(空格、制表符、换行符)。

$ 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命令造成严重破坏。)

20jt8wwn

20jt8wwn3#

$ string="john is 17 years old"
$ set -- $string
$ echo $1
john
$ echo $2
is
$ echo $3
17
atmip9wb

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
jutyujz0

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是两个字。
前导空格和尾随空格将创建空行。

相关问题