我在bash工作,我有,我想刪除所有不符合特定正則表達式,該行大文件可能使用$ grep -e "<regex>" <file> > output.txt
正則表達式字符出現恰好x次
我想保留什麼是包含正好X倍指定字符,例如在二進制序列
0000,0001,0010,0011,0100,0101,0111,1000,1001,1010,1011,1100的任何行, 1101,1110,1111
我想只保留那些誰擁有2 ,留下我與
0011,0101,0110,1001,1010,1100
然後,我會用一個bash變量改變 我litterally尋找是半線(與相同長度的字符串工作總是精確長度的一半,)我需要的量半
我現在有這個權利。它不使用正則表達式。它的工作原理,但速度很慢:
($1
是每一個字符串的長度,$d
只是一個目錄)
sed -e 's/\(.\)/\1 /g' < $d/input.txt > $d/spaces.txt
awk '{c=0;for(i=1;i<=NF;++i){c+=$i};print c}' $d/spaces.txt > $d/sums.txt
grep -n "$(($1/2))" $d/sums.txt | cut -f1 -d: > $d/linenums.txt
for i in $(cat $d/linenums.txt)
do
sed "${i}q;d" $d/input.txt
done > $d/valids.txt
如果你想知道這使空間中每個數字轉向1010
之間爲1 0 1 0
,然後將這些值相加,將結果保存在sums.txt中,將grep保存爲length/2,並僅將行號保存在linenums.txt中,然後讀取linenums.txt並將相應的行從input.txt輸出到output.txt
我需要更快一點的for循環是什麼東西太長了
感謝您的時間,並與我分享您的知識。
如何KISS? 'grep -E'0011 | 0101 | 0110 | 1001 | 1010 | 1100'' – janos