如何将一行分割成由bash中的一个或多个空格分隔的单词?
我意识到如何在Python中做到这一点
line = db_file.readline() ll=string.split(line)
但我怎么能在bash中做同样的事情? 真的有可能以这么简单的方式做到这一点?
s='foo bar baz' a=( $s ) echo ${a[0]} echo ${a[1]} ...
这取决于你分裂的意思。 如果你想迭代一个行中的单词,它是一个variables,你可以迭代。 例如,假设variablesline
是this is a line
。 那么你可以这样做:
for word in $line; do echo $word; done
这将打印:
this is a line
for .. in $var
使用$IFS
的值分割$var
,默认值表示“分割空白和换行符”。
如果你想读取用户或文件的行,你可以做一些事情:
cat $filename | while read line do echo "Processing new line" >/dev/tty for word in $line do echo $word done done
对于其他任何事情,你需要更加明确,并更详细地定义你的问题。
注 :编辑删除bashism,但我仍然保持cat $filename | ...
因为我喜欢它而不是redirect。
如果你想要一个特定的单词,awk可能是有用的,例如
$ echo $ LINE | awk'{print $ 2}'
在$ LINE中打印第二个空格分隔的单词。 你也可以分割其他的字符,例如
$ echo“5:6:7”| awk -F:'{print $ 2}' 6
echo $line | tr " " "\n"
给出类似于上面大多数答案的输出; 不使用循环。
在你的情况下,你也提到ll=<...output...>
所以,(鉴于我不知道很多python,并假设你需要将输出分配给一个variables),
ll=`echo $line | tr " " "\n"`
应该足够了(记得echo "$ll"
而不是echo $ll
)
$ line="these are words" $ ll=($line) $ declare -p ll # dump the array declare -a ll='([0]="these" [1]="are" [2]="words")' $ for w in ${ll[@]}; do echo $w; done these are words
做这个
while read -r line do set -- $line echo "$1 $2" done <"file"
1美元,2美元等将是你的第一和第二拆分“领域”。 使用$ @来获取所有值。使用$#来获得“字段”的长度。
更简单,
echo $line | sed 's/\s/\n/g'
\ s – >空格字符(空格,制表符,NL,FF,VT,CR)。 在许多系统中也有效[:space:]
\ n – >换行
read
的-a
选项将允许您分割由$IFS
包含的字符读入的行。
如果你已经在variables$ LINE中有你的文本行,那么你应该可以这样说
for L in $LINE; do echo $L; done