我在bash脚本中使用sed来更改一些变量值。这些变量是不同类型的混合,还包括一些特殊字符:
sed -i -e "s/NPROC=[^,]*,/NPROC=$NPROC/" \
-e "s/NFRPOS=[^,]*,/NFRPOS=$OUTPUTFREQ/" \
-e "s/NFRHIS=[^,]*,/NFRHIS=$OUTPUTFREQ/" \
-e "s/COSP_OUTPUT_FREQUENCY=[^,]*,/COSP_OUTPUT_FREQUENCY=$OUTPUTFREQ/" \
-e "s/TSTEP=[^,]*,/TSTEP=$TSTEP/" \
-e "s/NCEXTR=[^,]*,/NCEXTR=$NCEXTR/" \
-e "s/NVXTR2=[^,]*,/NVXTR2=$NVXTR2/" \
-e "s/NVEXTR=[^,]*,/NVEXTR=$NVEXTR/" \
-e "s/COSP_NLEVELS=[^,]*,/COSP_NLEVELS=$NLEV/" \
-e "s/NVEXTRAGB=[^,]*,/$NVEXTRAGB/" \
-e "s/NVEXTR2GB=[^,]*,/$NVEXTR2GB/" \
-e "s/NFPLEV=[^,]*,/NFPLEV=$NFPLEV/" \
-e "s/CNMEXP=[^,]*,/CNMEXP=\"${EXPID}\"/" \
-e "s/LFPOS=[^,]*,/NFPOS=2/" \
-e "s/NLAT=[^,]*,/NLAT=$NLAT/" \
-e "s/NLON=[^,]*,/NLON=$NLON/" \
$NAMELIST
+ sed -i -e 's/NPROC=[^,]*,/NPROC=10/' ' '
sed: can't read : No such file or directory
但是,我一直收到无法找到文件$ NAMELIST的错误。该文件确实退出同一目录,名称中没有错误。添加完整路径也无济于事。所以我想知道这个sed命令有什么问题。
答案 0 :(得分:3)
第一个反斜杠后你有一个空格。您没有转义换行符以继续执行命令,而是转移空间,因此它认为要编辑的文件的名称是单个空格。
确保反斜杠是每一行的最后一个字符。
答案 1 :(得分:0)
无论出于何种原因,你的NAMELIST变量都没有被扩展。 Sed正在寻找一个名为" $ NAMELIST"的文件。而不是说" /the/path/to/namelist.txt" ...
检查设置NAMELIST变量的逻辑是什么。
答案 2 :(得分:0)
另一种解释是 @Override
public void actionPerformed(ActionEvent e) {
int a = 0, b = 0, c = 0;
boolean isValidA = true, isValidB = true, isValidC = true;
try {
a = Integer.parseInt(theApp.tred.getText());
} catch (NumberFormatException ex) {
isValidA = false;
}
try {
b = Integer.parseInt(theApp.tgreen.getText());
} catch (NumberFormatException ex) {
isValidB = false;
}
try {
c = Integer.parseInt(theApp.tblue.getText());
} catch (NumberFormatException ex) {
isValidC = false;
}
if (!isValidA) {
tred.setText("");
} else {
if (a < 0) {
a = 200;
tred.setText("200");
} else if (a > 255) {
a = 255;
tred.setText("255");
}
}
if (!isValidB) {
tgreen.setText("");
} else {
if (b < 0) {
b = 200;
tgreen.setText("200");
} else if (b > 255) {
b = 255;
tgreen.setText("255");
}
}
if (!isValidC) {
tblue.setText("");
} else {
if (c < 0) {
c = 200;
tblue.setText("200");
} else if (c > 255) {
c = 255;
tblue.setText("255");
}
}
if (isValidA && isValidB && isValidC) {
message.setText("CE203 Assignment submitted by: Steven Beresford - 1404398");
message.setForeground(new Color(a, b, c));
} else {
message.setText("invalid input! please enter numbers only");
message.setForeground(new Color(0, 0, 0));
}
}
字面上包含“无法阅读”这一短语。致白:
NAMELIST
您如何设置$ NAMELIST="can't read "
$ sed -e 1d "$NAMELIST"
sed: can't read : No such file or directory
?