我在perl脚本中具有以下行:
my $temp = `sed 's/ /n/g' /sys/bus/w1/devices/w1_bus_master1/10-000802415bef/w1_slave | grep t= | sed 's/t=//'`;
引发错误:" sed:-e表达#1,char 2:未终止的`s'命令'
如果我在下面运行一个shell脚本,则可以正常工作:
temp1=`sed 's/ /n/g' /sys/bus/w1/devices/w1_bus_master1/10-000802415bef/w1_slave | grep t= | sed 's/t=//'`
echo $temp1
有人有任何想法吗?
perl将您的 n
解释为字面的新线字符。因此,您的命令行将从SED的角度看起来像这样:
sed s/ /
/g ...
哪个不喜欢。壳不会以这种方式解释。
正确的解决方案是在这种情况下根本不使用SED/GREP。毕竟,佩尔非常非常擅长处理文本。例如(未经测试):
use File::Slurp;
my @lines = split m/n/, map { s/ /n/g; $_ } scalar(read_file("/sys/bus...));
@lines = map { s/t=//; $_ } grep { m/t=/ } @lines;
另一次逃脱n
,例如sed 's/ /\n/g'...
。
您需要在我们的第一个正则表达式中逃脱n
。Perl中的Backtick-operator认为它是一个控制符号,并插入Newline而不是字符串n
。
|
V
my $temp = `sed 's/ /\n/g' /sys/bus/ # ...