我想grep的結果分配給進一步使用一個變量:如何用換行保留grep結果?
lines=`cat abc.txt | grep "hello"`
,但我發現了什麼是$行不包含換行符了。所以當我做
echo $lines
只有一行被打印。我如何保留換行符,所以當我回顯$行時,它與cat abc.txt |相同grep「你好」。
我想grep的結果分配給進一步使用一個變量:如何用換行保留grep結果?
lines=`cat abc.txt | grep "hello"`
,但我發現了什麼是$行不包含換行符了。所以當我做
echo $lines
只有一行被打印。我如何保留換行符,所以當我回顯$行時,它與cat abc.txt |相同grep「你好」。
你想說的
echo "$lines"
代替
echo $lines
要闡述:
echo $lines
指「與變量的命名lines
內容替換$lines
形成一個新的命令,將其分割爲空格以形成零個或多個新的參數給echo
命令。 PLE:
lines='1 2 3'
echo $lines # equivalent to "echo 1 2 3"
lines='1 2 3'
echo $lines # also equivalent to "echo 1 2 3"
lines="1
2
3"
echo $lines # also equivalent to "echo 1 2 3"
所有這些例子是等價的,這是因爲殼忽略特定種類存儲在變量lines
的各個單詞之間的空格。實際上,更確切地說,shell將特殊IFS
(內部字段分隔符)變量的字符上的變量內容(默認值(至少在我的bash版本上))分割爲三個字符空格,製表符和換行符。
echo "$lines"
另一方面,意味着從變量lines
的確切值形成單個新參數。
有關更多詳細信息,請參閱bash手冊頁的「擴展」和「分詞」部分。
使用Windows端口的grep(不是原來的問題,我kow和不適用於* nix)。我發現-U
很好地解決了這個問題。
從--help
:
-U,--binary不會在EOL剝離CR字符(MSDOS)
它的工作原理。謝謝@Haggisbreath。使用-U日誌打印新行。 grep命令是... electron app.js | grep --line-buffered -i -e「錯誤」-U | tee logs.txt – Gaurav 2017-08-10 12:44:52
貓濫用:'線= $(grep的招呼的abc.txt)' 。 – 2011-03-22 04:18:31
另請參閱http://stackoverflow.com/questions/613572/capturing-multiple-line-output-to-a-bash-variable/ – 2011-03-22 04:22:08