bash中命令中的变量

bash中命令中的变量,bash,grep,Bash,Grep,我写的程序应该从example.txt从最长到最短写单词。我不知道如何确切地'^.{$v}$'应该看起来像使它工作 #!/bin/bash v=30 while [ $v -gt 0 ] ; do grep -P '^.{$v}$' example.txt v=$(($v - 1)) done 我试过: ${v} $v “$v” 这是我的第一个问题,抱歉出错:)使用: grep -P "^.{$v}$" example.txt 您所做的并不是在shell中如何处理这

我写的程序应该从example.txt从最长到最短写单词。我不知道如何确切地
'^.{$v}$'
应该看起来像使它工作

#!/bin/bash
v=30

while [ $v -gt 0 ] ; do
    grep -P '^.{$v}$' example.txt 
    v=$(($v - 1))
done
我试过:

  • ${v}
  • $v
  • “$v”
这是我的第一个问题,抱歉出错:)

使用:

grep -P "^.{$v}$" example.txt 

您所做的并不是在shell中如何处理这个问题。阅读以了解一些问题,然后以下是如何在shell脚本中真正完成您要完成的任务:

$ cat file
now
is
the
winter
of
our
discontent

$ awk -v OFS='\t' '{print length($0), NR, $0}' file | sort -k1rn -k2n | cut -f3-
discontent
winter
now
the
our
is
of
要了解其作用,请查看awk输出:

$ awk -v OFS='\t' '{print length($0), NR, $0}' file
3       1       now
2       2       is
3       3       the
6       4       winter
2       5       of
3       6       our
10      7       discontent
第一个数字是每行的长度,第二个数字是行在输入文件中出现的顺序,因此当我们对其进行排序时:

$ awk -v OFS='\t' '{print length($0), NR, $0}' file | sort -k1rn -k2n
10      7       discontent
6       4       winter
3       1       now
3       3       the
3       6       our
2       2       is
2       5       of

我们可以使用
-k1rn
按长度排序(最长优先),但通过添加
-k2n
保留输入文件中相同长度行的顺序。然后,
cut
只删除了
awk
为使用
sort
而添加的两个前导数字。

第一个Q还不错,至少你已经尝试解决了你的问题。在将来(对于这个Q来说不是那么多),包含一小部分样本数据是非常有帮助的,这些样本数据涵盖了您希望处理的所有案例,加上1个将不被处理的项目;B.输入所需的输出,包括未处理的记录C.代码/当前输出/错误消息。D.您对代码为什么应该工作的想法(我们将帮助您确定对工作方式的理解)。祝你好运