我有一个带有几行的文本文件,并使用以下命令将文本文件保存到一个数组中
readarray -t array < Textfile
文本文件包含例如以下内容:
123
456
789
现在,我想使用grep命令在使用该数组的另一个文本文件中查找结果,因此打印出出现“ 123”,“ 456”或“ 789”的行。为了测试数组,我尝试让 grep 查找“123”、“456”和“789”相同的文本文件并输出匹配的行,如果三个字符系列中至少有一个出现。
我试过了
grep "${array[*]}" Textfile
但这没有显示任何结果。我究竟做错了什么?
首先,您可以只使用文件本身。这比尝试使用 shell 数组简单得多:
grep -f file1.txt file2.txt
这将打印file2.txt
匹配中的任何行的任何行file1.txt
。
如果出于某种原因必须使用数组,则事情会更加复杂。你不能只做grep "${array[*]}" Textfile
因为"${array[*]}"
将扩展到由空格分隔的数组中的元素列表:
$ array=("foo" "bar" "baz")
$ echo "${array[*]}"
foo bar baz
这意味着您的grep
命令将变为:
grep 'foo bar baz' file
这意味着“foo bar baz
文件中的grep file
”。你想要做的是 grep for foo
, or bar
, or baz
。这可以使用 -E 选项grep
并加入您要搜索的模式来完成|
:
grep -E 'foo|bar|baz' file
为此,您需要做一些复杂的事情,例如:
grep -E "$(printf '%s|' "${array[@]}" | sed 's/|$//')" file
也许:
grep -E "$(export IFS="|"; echo "${array[*]}")" file
总的来说,使用文件更好、更快、更容易,而无需考虑数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句