Grep
tcsh 腳本 - 保留 grep 結果的換行符
我正在 tcsh 中編寫一個簡單的腳本(顯然這是一個壞主意,但很好)從文本文件中 grep 一些模式。假設我們有一個文件
animal_names.txt
,其中包括:dog carrot dog bolt cat larry cat brownies bird parry bird pirate
我寫了腳本:
set animals = "dog\|cat" set names = `grep $animals animal_names.txt` echo "$names"
目的是用“狗”或“貓”對所有行進行 grep。但是,我得到的輸出只是單行:
dog carrot dog bolt cat larry cat brownies
不知何故,換行符在輸出中被刪除了。有沒有辦法保留換行符?另一篇文章建議使用 :q 修飾符,但在我的情況下不起作用。
“我得到的輸出只有一行”-不幸的是,您剛剛遇到了腳本輸入有問題的原因之一
[t]csh
。保留換行符要麼是不可能的,要麼是不重要的。請改用bash
(或sh
)。假設這是寫入文件
find_animals
:#!/bin/sh animals='dog|cat' names=$(grep -E "$animals" animal_names.txt) echo "$names"
請注意,我沒有轉義 RE
|
符號,而是告訴grep
我使用擴展正則表達式 (ERE)。您可以按照原件保留它,但我認為這樣更容易閱讀。使腳本可執行
chmod a+x find_animals
animal_names.txt
在可以找到文件的目錄中執行它./find_animals
輸出
dog carrot dog bolt cat larry cat brownies
如果你堅持使用
tcsh
它會起作用:#!/usr/bin/tcsh -f set animals = 'dog|cat' set temp = "`grep -E '$animals' animal_names.txt`" set names = "" set nl = '\ ' foreach i ( $temp:q ) set names = $names:q$i:r:q$nl:q end set names = $names:r:q echo $names:q
參考