我想修改一个ASCII文件。 每行包含
XOR word word
应改为
my insertion XOR word word
这项任务我使用的是简单的PERL单线
perl -i -pe "s/(XOR\s.*)/my insertion (\1)/g" testFile
它在tcsh中运行完美 但是当我从tclsh执行它时,文件没有被修改
tcsh> cat testFile
some text
XOR X1 Y2
another line
yet another line
XOR X2 Y3
something else
tclsh:
%catch {exec perl -pe "s/(XOR\s.*)/my insertion (\1)/g" testFile} res
0
puts $res
some text
XOR X1 Y2
another line
yet another line
XOR X2 Y3
something else
答案 0 :(得分:2)
你必须支持表达。
exec perl -i -pe {s/(XOR\s.*)/my insertion (\1)/g} testFile
或者,逃避反斜杠。因为,在双引号内,\s
与文字s
相同。要表示字面反斜杠,它应该是
exec perl -i -pe "s/(XOR\\s.*)/my insertion (\\1)/g" testFile
答案 1 :(得分:2)
答案 2 :(得分:1)
您没有在tcsh脚本中显示关键-i
标志 (您显示的命令包含它) - 要更改文件。因此,如果这确实存在于您的脚本中,那么您并没有告诉它编写该文件。
此外,我将一个班轮更改为前置行而不是运行替换。
perl -i -ne 'print "my insertion " . $_ if /^XOR/' testFile
事后添加,为了完整性。
如Dinesh解决方案所示,''
中的代码也需要包含在{}
中以进行保护。
答案 3 :(得分:0)
尝试使用-i
修改文件本身
perl -i -pe "s/(XOR\s.*)/my insertion (\1)/g" testFile