我有一个项目,目标是提取data.txt文件的电话号码,所以我做了一个程序。像这样:
grep -E '^[ ]{0,9}\([0-9]{3}\) [0-9]{3}-[0-9]{4}[ ]{0,9}$' $1 | sed 's/^[ \t]*//' > all-result-phonenumber-filter.txt
count=$(wc -l all-result-phonenumber-filter.txt)
echo "The number of line is :$count" >> all-result-phonenumber-filter.txt
我的问题是,当我想使用此程序并在终端上执行时,必须对终端命令使用管道。我在终端上尝试了许多不同的命令,最后一个是:
cat data.txt | ./all-phone-number-filter.sh | cat all-result-phonenumber-filter.txt
但是该命令不起作用,我也不知道为什么。那么,我必须以上述格式使用正确的命令是什么?
我必须使用以下格式SDTIN |管道的STDOUT。
我给你data.txt文件:
(512) 258-6589
(205) 251-6584
(480) 589-9856
(303) 548-9874
(808) 547-3215
(270) 987-6547
(225) 258-9887
(314) 225-2543
(979) 547-6854
(276) 225-6985
les numeros suivants ne sont pas valables pour ce programme :
+512 325
+512 251 2545654654
+512 6546 6464646
+512546546646564646463313
(314) sgf225-2543
(314) 225-2543fsgaf
(314afd) 225-2543
FSd(314) 225-2543
我需要得到的结果是:
(512) 258-6589
(205) 251-6584
(480) 589-9856
(303) 548-9874
(808) 547-3215
(270) 987-6547
(225) 258-9887
(314) 225-2543
(979) 547-6854
(276) 225-6985
The number of line is :10 all-result-phonenumber-filter.txt
答案 0 :(得分:1)
尝试一下:
cat data.txt | ./all-phone-number-filter.sh > all-result-phonenumber-filter.txt
要查看结果,请执行下一个命令
cat all-result-phonenumber-filter.txt
答案 1 :(得分:1)
过滤器将:
您的程序将:
因此,您的程序不是过滤器,因此无法与您想要的程序类似地使用。
将程序变成过滤器的最简单/最糟糕的方法是改为写入一个临时文件,然后cat
写入:
#!/bin/sh
# TODO: Rewrite to be a nicer filter that doesn't write to files
tmp=$(mktemp)
grep -E '^[ ]{0,9}\([0-9]{3}\) [0-9]{3}-[0-9]{4}[ ]{0,9}$' $1 | sed 's/^[ \t]*//' > "$tmp"
count=$(wc -l < "$tmp")
echo "The number of line is :$count" >> "$tmp"
cat "$tmp"
rm "$tmp"
现在您可以将其视为过滤器:
$ cat data.txt | ./all-phone-number-filter.sh | tail -n 3
(979) 547-6854
(276) 225-6985
The number of line is :10
$ cat data.txt | ./all-phone-number-filter.sh > myfile.txt
(no output)
$ nl myfile.txt | tail -n 5
7 (225) 258-9887
8 (314) 225-2543
9 (979) 547-6854
10 (276) 225-6985
11 The number of line is :10