tcsh 脚本 - 保留 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"

目的是用“dog”或“cat”来grep所有行。但是,我得到的输出只是一行:

dog carrot dog bolt cat larry cat brownies

不知何故,换行符在输出中被删除。有没有办法保留换行符?其他邮政建议使用 :q 修饰符,但它在我的情况下不起作用。

答案1

我得到的输出只是一行“ - 不幸的是,您刚刚遇到了脚本编写出现问题的原因之一[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

参考

相关内容