我想设置一个bash别名来自动grep一个目录中的所有日志;但是,为了使这个用户友好,我需要转义句点并添加一个空白边界,这样grep就不会匹配太多的行。
首先我检查以确保我有正确的语法来转义地址…

[mpenning@sasmars daily]$ echo 1.1.1.1 | sed "s/\./\\\\./g"
1\.1\.1\.1
[mpenning@sasmars daily]$

接下来我试图摆脱cli参数…但我还没到那里…
[mpenning@sasmars daily]$ alias tryme='echo `sed "s/$argv[1]/\\\\./g"`'
[mpenning@sasmars daily]$ tryme 1.1.1.1

->无限期挂起直到我击中CNTLC
我知道Echo不会搜索,但这只是一个简单的测试。
将参数中的句点转义为bash别名的最简单方法是什么?

最佳答案

您需要的是一个函数,可以使用bash的内置替换语法:

$ function tryme() { echo "${1//./\.}"; }
$ tryme 1.1.1.1
1\.1\.1\.1
$ tryme "also. with ... spaces"
also\. with \.\.\. spaces

这将避免您分叉sed进程。

08-25 21:55