我已经读过这个关于如何使用bash从文本文件中读取n个字符的问题.我想知道如何从一个看起来像这样的文件一次读一个单词:
example text
example1 text1
example2 text2
example3 text3
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释一下,或者给我一个简单的例子吗?谢谢!
Tod*_*obs 17
使用标准输入执行此操作的方法是将-a
标志传递给:
read -a words
echo "${words[@]}"
Run Code Online (Sandbox Code Playgroud)
这会将整行读入索引数组变量,在本例中为命名单词.然后,您可以对具有shell参数扩展的单词执行任何您喜欢的数组操作.
对于面向文件的操作,当前版本的Bash也支持内置的mapfile .例如:
mapfile < /etc/passwd
echo ${MAPFILE[0]}
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,阵列都是可行的方式.值得花些时间熟悉Bash数组语法,以充分利用此功能.
Som*_*ude 13
read
默认情况下,该命令读取整行.因此,解决方案可能是读取整行,然后将其拆分为空格,例如for
:
while read line; do
for word in $line; do
echo "word = '$word'"
done
done
Run Code Online (Sandbox Code Playgroud)
通常,您应该使用while read -r line
循环从文件中读取.要执行此操作并解析行上的单词,需要在for
循环内嵌套while
循环.
这是一种无需嵌套循环的技术:
for word in $(<inputfile)
do
echo "$word"
done
Run Code Online (Sandbox Code Playgroud)
在给定的上下文中,单词数已知:
while read -r word1 word2 _; do
echo "Read a line with word1 of $word1 and word2 of $word2"
done
Run Code Online (Sandbox Code Playgroud)
如果要将每行读入数组,read -a
请将第一个单词放入数组的元素0,将第二个单词放入元素1,依此类推:
while read -r -a words; do
echo "First word is ${words[0]}; second word is ${words[1]}"
declare -p words # print the whole array
done
Run Code Online (Sandbox Code Playgroud)