2017-10-12 64 views
1
$ cat testfile 
first line mark apple 
second line not banana 
third line mark pear 

我想循環每一行文件。如果它包含mark則顯示整行而不會佔用空間。如何在不丟失for循環中的空間的情況下回顯變量?

,但如果我的代碼如下,它把空間分成回報:

for i in `cat testfile | grep mark`; do 
    echo $i 
done 

輸出

first 
line 
mark 
apple 
third 
line 
mark 
pear 

如果用printf

for i in `cat testfile | grep mark`; do 
    printf $i 
done 

輸出

firstlinemarkapplethirdlinemarkpear 

我怎麼能得到的輸出如下:

first line mark apple 
third line mark pear 
+0

grep的標誌testfile的 – xxfelixxx

+0

我正要建議'因爲我在 「$(grep的標誌testfile的)」;做回聲「$我」; done',但它將'$ i'設置爲'grep'命令的整個多行輸出,而不是按行迭代。 –

回答

2

這應該是OK:

grep mark testfile 
2

最簡單的方法是:

grep mark testfile 

沒有循環需要。並且沒有useless use of cat


但是,如果你想知道爲什麼你的循環是不行的,那是因爲你在grep的輸出循環每。遍歷每個你需要使用read

cat testfile | grep mark | while read line; do 
    echo "$line" 
done 

while read line; do 
    echo "$line" 
done <(cat testfile | grep mark) 

其實是完全安全的,我們應該加上IFS=read -r妥善保存所有的空格和反斜槓。

cat testfile | grep mark | while IFS= read -r line; do 
    echo "$line" 
done 

雖然這是很多不必要的代碼。讀每一行只是爲了吐出來?最好只是省略整個循環。

+0

這很完美。但是另外,在grep之後,我的腳本需要循環結果,並將最後一個單詞放入函數中以測試它的模式,如果匹配,則打印整行。如果是這種情況,我應該在'grep mark testfile'中使用我;做?我害怕這樣,它又分裂了? –

1

謝謝大家的回覆,之後轉換成grep的模式文件,該腳本如下,讓我知道這是否是一個合適的:

grep pattern file | while read line; do 
    ip=`echo $line | cut -d ' ' -f 8` 
    fqdn=`echo $line | cut -d ' ' -f 6` 
    grepcidr -v -f /root/collect/china_routes.txt <(echo $ip) >/dev/null 
    if [ $? == 0 ]; then 
     grep $fqdn fqdnfile || echo $fqdn >> /root/collect/fqdn 
    fi 
done 

以上正試圖看看「模式」現身在任何文件行中,然後它將第八個字段作爲ip,第六個字段作爲fqdn(因爲該行由空格分隔);那麼它將通過grepcidr檢查$ ip是否在cidr範圍內,如果它不在範圍內(-v),那麼檢查$ fqdn是否已存在於fqdnfile文件中,如果它不在文件中,則echo $ FQDN到該文件

文件本身看起來像如下:

Oct 11 20:19:05 dnsmasq[30593]: reply api.weibo.com is 180.149.135.176 
Oct 11 20:19:05 dnsmasq[30593]: reply api.weibo.com is 180.149.135.230 
Oct 11 20:19:06 dnsmasq[30593]: query[A] sina.com from 180.169.158.178 
Oct 11 20:19:06 dnsmasq[30593]: forwarded sina.com to 114.114.114.114 
Oct 11 20:19:06 dnsmasq[30593]: reply sina.com is 66.102.251.33 
Oct 11 20:19:06 dnsmasq[30593]: query[PTR] 74.103.225.116.in-addr.arpa from 127.0.0.1 
Oct 11 20:19:06 dnsmasq[30593]: cached 116.225.103.74 is NXDOMAIN-IPv4 
相關問題