例子.txt
alias znm="base64"
alias asu="sed 's/.\{4\}/&™/g'"
alias mmk="sed 's/\(.\{4\}\)\™/\1/g'"
alias mmk="sed 's/\(.\{8\}\)\™/\1/g'"
期望的输出:
alias asu="sed 's/.\{4\}/&™/g'"
但是当我尝试这个时它得到了错误
grep -wo "alias asu="sed 's/.\{4\}/&™/g'"" example.txt
如何正确执行?
这避免了您在使用引号和正则表达式字符时遇到的问题,并将模式按原样传递到
grep
标准输入中。该grep
实用程序从标准输入读取模式,因为我们已经要求它使用-f /dev/stdin
, 来执行此操作(在 Android 上,您可以改为使用-f /dev/fd/0
)。使用
-F
模式作为字符串而不是正则表达式,并-x
确保我们只匹配完全匹配模式的行(就像模式被锚定到行的开头和结尾一样)。使用它来测试该特定别名是否在文件中:
你的命令,
真的是
grep
用一个模式和两个文件名调用:"alias asu="sed
是模式(实际上是一个正则表达式,因为您不使用-F
)。's/.\{4\}/&™/g'""
是第一个文件名,因为 shell 会在未加引号的空间中破坏字符串。example.txt
是第二个文件名。您显然可以确保引用所有特殊字符和引号,但是使用 here-document 会稍微容易一些,因为您根本不必修改模式。