![sed 在搜索中不起作用](https://linux22.com/image/1175869/sed%20%E5%9C%A8%E6%90%9C%E7%B4%A2%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我需要替换
DatabaseConnection.GetConnection()
为
DatabaseConnection.GetConnection(_connectionString)
使用 grep (GNU grep) 3.1
grep GetConnection() CustomerRepository.cs
产量
bash: syntax error near unexpected token `('
然而
grep GetConnection\(\) CustomerRepository.cs`
输出
using (IDbConnection connection = DatabaseConnection.GetConnection())
符合预期
使用 sed (GNU sed) 4.8
sed -e 's/GetConnection()/GetConnection(_connectionString)/' CustomerRepository.cs
输出输入文件的全部内容,就像我转义搜索括号时一样。
完全不知所措,我需要做什么才能完成这项工作?
答案1
“grep GetConnection() CustomerRepository.cs”
抱怨是正确的,因为“(”是由 shell 特殊解释的,并且按照你的方式使用它没有任何意义。
将“(”转义为“(”,将“)”转义为“)”是一个很好的做法,但是将整个参数放在引号中会更好:
grep 'GetConnection()' CustomerRepository.cs
至于你的第二次尝试,
sed -e 's/GetConnection()/GetConnection(_connectionString)/' CustomerRepository.cs
sed 根据你的命令替换每一行,并把每一行不管你的替换是否发生。