Grep

tcsh 腳本 - 保留 grep 結果的換行符

  • December 17, 2021

我正在 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

參考

引用自:https://unix.stackexchange.com/questions/682831