这是输入文件(3 部分除以##
)。
## some info 1
aaa
bbb
ccc
## some info 2
ddd
eee
fff
## some info 3
ggg
hhh
iii
我需要根据脚本后面的参数获取基于搜索词的文件的一个或多个部分。
例子。
在
find-part-of-file.sh hhh aaa
出去
## some info 1
aaa
bbb
ccc
## some info 3
ggg
hhh
iii
$1
还有一个小问题,是否可以在别名中使用超过 1 个变量.bashrc
?因为当我使用例如带有更多变量的脚本的别名时,别名“加入”两个输入到最后一个变量。
alias test-env="echo var1 = $1 , var2 = $2"
hosek@dell:~$ test-env aaa
var1 = , var2 = aaa
hosek@dell:~$ test-env aaa bbb
var1 = , var2 = aaa bbb
hosek@dell:~$
您根本不能将位置参数与别名一起使用;您的示例似乎只分配了一个值,而实际上两者
$1
都$2
扩展为空值,然后附加任何“参数”,您可以使用以下方法进行验证set -x
:如果要传递参数,请改用 shell 函数:
对于您的主要问题,我建议在 *paragraph 模式中使用 awk 而不是 grep ex. 与 GNU awk:
如果必须使用
grep
,可以这样做:这将从 each 开始
##
,匹配aaa
或hhh
在下一个之前打印整个匹配块#
。-Pzo
将启用使用 Perl 兼容的正则表达式 with-P
,启用多行 with-z
并仅打印匹配的部分 with-o
。\b
指定单词边界。它将所有被它包围的字符作为一个完整的单词一次匹配,从而防止文件中的单词与部分匹配的字符匹配,即精确的单词不多也不少。