我想编写一个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
答案 0 :(得分:2)
当然可以提供帮助。见这里:
关于bash的酷网站在这里:http://wiki.bash-hackers.org/doku.php
man sort
man grep
man sed
man awk
man strings
man tee
总是正确地将你的作业标记为“家庭作业”;)
您可以尝试以下内容:
<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
我将保留模式匹配的细节。