替换命令有问题

我有一些替换命令的问题。 输入文件我有这个
{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}
我想用单引号替换
'{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}'
使用下面提到的命令
find input.txt -exec sed 's/{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}/'{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}'/g' {} ;
我收到这样的错误
bash: syntax error near unexpected token `('
    
已邀请:
首先,您不能在用单引号分隔的参数中轻松插入文字单引号。 你必须用
'"'"'
'''
替换你的
'
。 作为猜测这个问题的提示,这里的抱怨来自shell,这意味着即使你的命令行也是错误的。 其次,你应该知道美元和圆括号是sed正则表达式中的特殊字符。你可能不得不逃避它们。有关详细信息,请阅读
man sed
。 第三,我不确定
find input.txt
是否有效。我猜你的意思是
find . -type f -name input.txt
?     
这是因为替换字符串中的裸ѭ4实际上是终止了
sed
命令,这意味着shell正在尝试处理该行。当Benoit的编辑正确地将您的问题引入语法颜色时,这实际上变得非常明显。你可以看到第二行
'
(替换文本的第一个字符)由于字符串终止而将颜色从红色变为黑色。 另外,
sed
不喜欢使用裸
[]
,因为它们表示正则表达式中的字符类。 你可以解决这两个问题:
pax> find input.txt -exec sed 's/{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}/x27{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}x27/g' {} ;
哪个输出:
'{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}'
所以基本上,转义搜索字符串中的方括号,以便将它们视为文字并在替换字符串中使用
x27
而不是
'
。     
我发现为什么你应该这样做很有趣。你应该首先编写正确的代码,因为我可以看到它的awk代码。当你创建它时,不要告诉我你故意省略
input.txt
文件中的单引号?它只是你编辑的一个文件。没有必要使用find。 (除非你不知道它在哪里)。     
最后我找到了简单的方法来做到这一点。 cat input.txt sed“s / {a [$ 1] = a [$ 1] FS $ 2} END {for(i in a)print i,a [i]} /'{a [$ 1] = a [$ 1] FS $ 2} END {for(i in a)print i,a [i]}'/ g“ 我希望我会有所帮助     

要回复问题请先登录注册