我写了一个程序,该程序应该将example.txt中的单词从最长写到最短。我不知道'^.{$v}$'
应该如何让它工作?bash中的命令变量
#!/bin/bash
v=30
while [ $v -gt 0 ] ; do
grep -P '^.{$v}$' example.txt
v=$(($v - 1))
done
我想:
${v}
$v
"$v"
这是我的第一个问题,遗憾的任何错误:)
我写了一个程序,该程序应该将example.txt中的单词从最长写到最短。我不知道'^.{$v}$'
应该如何让它工作?bash中的命令变量
#!/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中。阅读why-is-using-a-shell-loop-to-process-text-considered-bad-practice学习的一些问题,然后你这是怎么会真正做到你想在一个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
我们CA按-k1rn
的长度排序(最长的第一个),但通过添加-k2n
,保留输入文件中相同长度的行的顺序。然后cut
只删除awk
添加的sort
使用的2个主要数字。
第一个Q不坏,至少你已经试图解决你的问题。在未来(对于Q而言不是那么多),包含A.一小套样本数据非常有帮助,它涵盖了您期望处理的所有情况以及一个不会被处理的项目; B.该输入所需的输出,包括未得到处理的记录C.您的代码/当前输出/错误消息。 D.你的想法是为什么你的代码应该工作(我们将帮助你解决你对事情工作的理解)。祝你好运! – shellter