題 如何直接從shell將數字列表輸入命令?


如何直接從shell將數字列表輸入命令?例如,這樣的事情

[1,2,3,4] | sort

會給

1
2
3 
4

編輯:

回應到目前為止發布的答案。 。 。我問這個問題,因為我想快速測試和調試一個控制台應用程序,它在輸入時需要輸入很多數字,而不必輸入大量的單個值,然後輸入回車符。我只想輸入'one liner'並點擊向上箭頭然後重播命令。理想情況下,我想在不使用包含值的文本文件的情況下執行此操作(這顯然是執行此操作的最簡單方法。)


4
2017-11-21 23:41


起源




答案:


我假設我們使用的是單位數字 - 在這種情況下 echo 1 2 4 3 | grep -o [1234567890]|sort 應該訣竅。我認為如果它是一個多位數,你必須調整grep的正則表達式。

grep -o按照正則表達式選擇並每行打印一個

編輯:一個更優雅的解決方案。

我們仍然使用echo,但是使用tr。這適用於大於一位數的數字

echo 10,2,4,3|tr ',' '\n'|sort -g

tr被告知要用換行符替換逗號,並按數字順序排序-g排序(假設你想要排序的那個)。

假設你 需要 由於某些奇怪的原因,列表中的方括號,您可以將其刪除

echo [10,2,4,3]|tr '[:punct:]' ' '|tr ' ' '\n'|sort -g

附加的tr命令用空格替換任何標點符號。


4
2017-11-22 00:47



你的上一個例子不起作用。首先 tr '[:punct:]' ' ' 在第二個之前將任何逗號轉換為空格 tr ',' '\n' 會看到他們。 - Nicole Hamilton
固定我認為 - 差不多,現在我前面有兩個空格......方括號似乎讓它變得有點棘手 - Journeyman Geek♦
嘗試 tr -d '[]' | tr ',' '\n'。 - Nicole Hamilton


您可以使用“here”文檔 << 內聯i / o重定向操作符。 shell會查找您提供的任何令牌(在此示例中, eof)作為此處doc的文件結束標記。

sort << eof
1
2
3
4
eof

另一種方法是迭代值, echo將它們分類:

for i in 1 2 3 4; do echo $i; done | sort

如果你喜歡的話 for loop打包為命令,使用一個過程:

list() for i in $*; do echo $i; done
list 1 2 3 4 | sort

5
2017-11-21 23:47





$ printf '%d\n' 1 3 2 4 | sort
1
2
3
4

要么

$ echo $'1\n2\n4\n3' | sort
1
2
3
4

3
2017-11-22 04:07



在某些州,如果沒有,第二個答案會更好 $。我已經得到了 echo '1\n2\n4\n3' 給出你顯示的輸出 echo $'1\n2\n4\n3',而 echo $'1\n2\n4\n3' 本身輸出 $1, 2, 4,和 3 (在單獨的行上)。 - Scott


你可以用貓

貓|分類
1
2
4
3
^ d(輸入結束)

2
2017-11-21 23:49



除了速度慢,這與之沒有什麼不同 sort 一個人。 - Nicole Hamilton
@Nicole:OP在編輯中解釋說 sort 是一個隱喻的其他,未指定的程序 - 和該程序 可以 測試它的標準輸入,以查看它是tty,文件,管道還是其他什麼。 - Scott
@Scott和那個有什麼不同 sort 作為別人的隱喻,但仍然是一切。該 cat | 沒有任何補充 - Nicole Hamilton
@Nicole:我的觀點是,如果你輸入 umptyfratz 然後鍵入一些輸入(由Ctrl + D終止),然後鍵入 cat | umptyfratz 然後是相同的輸入,您可能會得到兩種不同的行為。你說,“這沒有什麼不同......” - Scott
@Scott,我之前發布過 bash 而且,不,我的用戶很好。管道要快得多但我在評論後意識到我能夠便宜地使用它們因為我是多線程的; bash 不是,而且必須用叉子來餵管。但是讓我們離線。發送郵件至hamiltonlabs.com。如果你運行Windows,我會給你一份免費的工作副本,我們可以談談我做了什麼。 - Nicole Hamilton


“超級簡單”答案:鍵入命令,然後鍵入輸入。 (嚴格來說,這不是管道。“管道”這個詞在引用I / O重定向時被大量過度使用,這甚至不是I / O重定向,它只是標準的I / O.)以 按Ctrl+d (假設你是某種形式的* nix或類似Unix的東西,並且你沒有改變你的EOF角色)。例如:

(提示)> sort –f
The
quick
brown
fox

按Ctrl+d
brown
fox
quick
The

(提示)>

按Ctrl+d 可能會回應 ^D,輸出的第一行可能出現在同一行:

^ Dbrown
狐狸
快
該

2
2017-11-22 00:02