我寫了一個程序,該程序應該將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