我试图将变量的值一遍又一遍地设置为文件的一行。
for i in {1..5}
do
THIS = "grep -m $i'[a-z]' newdict2" | tail -1
echo $THIS
done
这个黑魔法的诀窍是什么?
答案 0 :(得分:1)
使用sed比使用tail和grep' s -m选项更容易运行它:
for i in {1..5}
do
THIS=$(grep -e '[a-z]' newdict2 | sed -ne "${i}p")
echo "$THIS"
done
如果从1开始到x,其他解决方法是通过循环读取:
while IFS= read -r THIS; do
echo "$THIS"
done < <(grep -e '[a-z]' newdict2)
通过awk:
while IFS= read -r THIS; do
echo "$THIS"
done < (awk '/[a-z]/ && ++i <= 5' newdict2)
另一个具有不同初始值的awk版本:
while IFS= read -r THIS; do
echo "$THIS"
done < (awk 'BEGIN { i = 2 } /[a-z]/ && i++ <= 5' newdict2)
答案 1 :(得分:0)
最好一次找到事件,然后循环它们。
grep -m "$i" '[a-z]' newdict |
nl |
while read i THIS; do
echo "$THIS"
done
如果您对循环内的任何内容不需要$i
,请移除nl
,然后移除read THIS
。
还要注意在变量插值周围使用双引号。