当前位置:  开发笔记 > 编程语言 > 正文

如何将一行划分为bash中由一个或多个空格分隔的单词?

如何解决《如何将一行划分为bash中由一个或多个空格分隔的单词?》经验,为你挑选了8个好方法。

我知道如何在python中做到这一点,只是用

line = db_file.readline()
ll=string.split(line)

但我怎样才能在bash中做同样的事情呢?是否真的有可能以这么简单的方式做到这一点?



1> ZoogieZork..:
s='foo bar baz'
a=( $s )
echo ${a[0]}
echo ${a[1]}
...


这应该被标记为正确的答案
(我无法添加问题的答案,因此添加为注释)如果您只想从命令的(例如)输出中提取第一个或最后一个单词,您可以简单地使用shell变量字符串替换运算符来删除字符串的第一个或最后一个部分.`desktop:〜$ var ="first last"桌面:〜$ first_word = $ {var %%*}#space star!桌面:〜$ echo $ first_word第一个桌面:〜$ last_word = $ {var ##*} #star space!桌面:〜$ echo $ last_word last`
这是我一直在寻找的,谢谢
@ isuru-buddhika此语法特定于Bash。如果您的脚本由Bash以外的其他程序执行(例如,在Debian或Ubuntu系统上以## / bin / sh开头),则会出现语法错误。如果脚本是像`bash deploy.sh`这样执行的,或者第一行更改为## // usr / bin / env bash`,它应该可以工作。

2> xioxox..:

如果你想要一行中的特定单词,awk可能是有用的,例如

$ echo $LINE | awk '{print $2}'

在$ LINE中打印第二个空格分隔的单词.您还可以拆分其他字符,例如

$ echo "5:6:7" | awk -F: '{print $2}'
6



3> Alok Singhal..:

这取决于你分裂的意思.如果你想迭代一行中的单词,这是一个变量,你可以迭代.例如,假设变量linethis is a line.然后你可以这样做:

for word in $line; do echo $word; done

这将打印:

this
is
a
line

for .. in $var$var使用值中的值进行拆分$IFS,其默认值表示"拆分空白和换行符".

如果要读取用户或文件中的行,可以执行以下操作:

cat $filename | while read line
do
    echo "Processing new line" >/dev/tty
    for word in $line
    do
        echo $word
    done
done

除此之外,您需要更明确地更详细地定义您的问题.

注意:编辑删除bashism,但我仍然保留,cat $filename | ...因为我喜欢它比重定向更多.


无用的`cat` - 像这样重定向文件:`done <"$ filename"`.另外,在此上下文中使用`for $ in"$ {var [@]}"`而不是索引变量.虽然在这种情况下数组可能是连续的,但Bash支持稀疏数组,而`$ {#var [@]}`可能不是最后一个条目(尽管`$ {var [@]:-1}`和`索引=($ {!a [@]}); count = $ {#sdex [@]}`将给出索引列表和正确的计数)
如果您在$ line中使用星号(*),则此方法将失败。如果用当前目录中的文件列表替换,Bash将替换。

4> harshvchawla..:
echo $line | tr " " "\n"

给出与上述大多数答案类似的输出; 不使用循环.


在你的情况下,你也提到ll=<...output...>,
所以,(鉴于我不太了解python并假设你需要将输出分配给变量),

ll=`echo $line | tr " " "\n"`

应该足够了(记得echo "$ll"代替echo $ll)



5> Paused until..:
$ 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



6> ghostdog74..:

做这个

while read -r line
do
  set -- $line
  echo "$1 $2"
done <"file"

$ 1,$ 2等将是你的第一和第二分裂"领域".使用$ @获取所有值.使用$#来获取"字段"的长度.



7> Ignacio Vazq..:

-a选项read将允许您按包含的字符分割读入的行$IFS


@asdf:看起来像这样:`filename = $ 1; 同时阅读-a LINE; 回显“ $ LINE”;完成<“ $ filename”`

8> 小智..:

更简单,

echo $line | sed 's/\s/\n/g'

\ s->空格字符(空格,制表符,NL,FF,VT,CR)。在许多系统中,也有效的[:space:]

\ n->新行

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有