Bash排序STDIN

时间:2011-06-26 21:07:38

标签: linux bash scripting

我想编写一个bash脚本,按不同文件中的规则对输入进行排序。第一条规则是在file1中写入所有字符或字符串。第二条规则是在file2中写入所有数字。第三条规则是在file3中写入所有字母数字字符串。必须忽略所有特殊字符。因为我不熟悉bash,所以我不知道如何实现这个目标。

有人可以帮助我吗?

谢谢, 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

运行后,它只在字符串文件中写入字符串。

问候,Haniball

3 个答案:

答案 0 :(得分: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)字符,事情变得有点复杂。

答案 1 :(得分: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

答案 2 :(得分: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

我将保留模式匹配的细节。