去關閉評論,假設你通過了從管道輸入或以其他方式輸入STDIN
:
perl -e 'my $re=shift;$re=~qr{$re};while(<STDIN>){if(/($re)/g){print"$1\n"}while(m/\G.*?($re)/g){print"$1\n"}}'
用法:
cat SOME_TEXT_FILE | perl -e 'my $re=shift;$re=~qr{$re};while(<STDIN>){if(/($re)/g){print"$1\n"}while(m/\G.*?($re)/g){print"$1\n"}}' 'YOUR_REGEX'
或我只想東西,全亂成bash函數...
bggrep()
{
if [ "x$1" != "x" ]; then
perl -e 'my $re=shift;$re=~qr{$re};while(<STDIN>){if(/($re)/g){print"$1\n"}while(m/\G.*?($re)/g){print"$1\n"}}' $1;
else
echo "Usage: bggrep <regex>";
fi
}
用法是一樣的,只是更清潔的前瞻性:
cat SOME_TEXT_FILE | bggrep 'YOUR_REGEX'
(或者只是輸入命令本身並輸入文本以逐行匹配,b這似乎不是一個可能的用例:)。
例(從您的評論):
bash$ cat garbage
fod,food,fad
bar
fooooooood
bash$ cat garbage | perl -e 'my $re=shift;$re=~qr{$re};while(<STDIN>){if(/($re)/g){print"$1\n"}while(m/\G.*?($re)/g){print"$1\n"}}' 'fo*d'
fod
food
fooooooood
或...
bash$ cat garbage | bggrep 'fo*d'
fod
food
fooooooood
的正則表達式?我認爲你的意思是一個正則表達式 – matchew 2011-06-07 01:20:44
對不起,你可以擴展一下你想要的東西嗎?從表面上看,這聽起來像是一個簡單的「grep」,但我知道這並不是全部。 :) – 2011-06-07 01:21:32
假設輸入是「fod,food,fad \ nbar \ nfoooood \ n」,正則表達式是「fo * d」。然後輸出應該是「fod \ nfood \ nfoooood \ n」或「fodfood \ n \ nfoooood \ n」。 – jonderry 2011-06-07 01:25:32