2011-06-26 147 views
-1

我想編寫一個bash腳本,按不同文件中的規則對輸入進行排序。第一條規則是在file1中寫入所有字符或字符串。第二條規則是將所有數字寫入file2。第三條規則是在file3中寫入所有字母數字字符串。所有特色字符必須被忽略。因爲我不熟悉bash,所以我不知道如何實現這一點。Bash Sorting STDIN

有人可以幫助我嗎?

感謝, Haniball

感謝您的答案,

我寫這個劇本,

#!/bin/bash 

inp=0 echo "Which filename for strings?" 
read strg 
touch $strg 
echo "Which filename for nums?" 
read nums 
touch $nums 
echo "Which filename for alphanumerics?" 
read alphanums 
touch $alphanums 
while [ "$inp" != "quit" ] 
do 
echo "Input: " 
read inp 
echo $inp | grep -o '\<[a-zA-Z]+>' > $strg 
echo $inp | grep -o '\<[0-9]>' > $nums 
echo $inp | grep -o -E '\<[0-9]{2,}>' > $nums 
done 

後,我跑了它,它只有在stringfile寫入字符串。

問候,Haniball

+1

這實際上是否需要寫在'bash(1)'中?存在用於處理文本的更爲方便的工具。另外,我很不清楚你想完成什麼 - 你需要在任何人都能理解你想要做的事情之前給出一個輸入文件和輸出文件。最後,堆棧溢出是_questions_和_answers_ - 這不是一個_please做我的工作爲我的網站。你最好向我們展示你解決問題的嘗試,並尋求具體的幫助。 – sarnold

+0

向我們展示您的輸入,沒有它,我們可以做的事情就不多了...... –

+0

輸入是:'42'然後'退出'。之後它只將'quit'放入stringfile中。數字文件是空的。 – Haniball

回答

1

grep是足夠了(你的問題是有點含糊。如果我有什麼不對,讓我知道...。)

使用下面的輸入文件:

這是一個包含單詞的字符串, 單個數字,如1和2以及 整數42 1066

所有字符或字符串

$ grep -o '\<[a-zA-Z]\+\>' sorting_input 
this 
is 
a 
string 
containing 
words 
single 
digits 
as 
in 
and 
as 
well 

所有的個位數的

$ grep -o '\<[0-9]\>' sorting_input 
1 
2 

所有多個位的數字

$ grep -o -E '\<[0-9]{2,}\>' sorting_input 
42 
1066 

輸出重定向到一個文件中,即grep ... > file1

0

Bash真的不是這類任務的最佳語言。雖然可能,但ild強烈建議使用perl,python或tcl。

也就是說,您可以將所有stdin從輸入寫入到具有shell重定向的臨時文件中。然後,使用像grep這樣的命令將匹配輸出到另一個文件。它可能看起來像這樣。

#!/bin/bash 

cat > temp 

grep pattern1 > file1 
grep pattern2 > file2 
grep pattern3 > file3 

rm -f temp 

然後,像這樣運行它:

cat file_to_process | ./script.sh 

我會留下來匹配你的模式的細節。

2

當然可以提供幫助。在這裏看到:

而且它始終是正確標記你的家庭作業 「功課」;)

你可以嘗試這樣的:

<input_file strings -1 -a | tee chars_and_strings.txt |\ 
grep "^[A-Za-z0-9][A-Za-z0-9]*$" | tee alphanum.txt |\ 
grep "^[0-9][0-9]*$" > numonly.txt 

以上只是針對美國 - 沒有國際(閱讀unicode)字符,事情會變得更復雜一點。