在 shell 中使用 sed 声明变量

Variable declaration with sed in cshell

我正在尝试使用 grep 解析格并将输出保存在 cshell 脚本的变量中。但是不知何故,我在添加 FILE_IN_B 变量时总是收到错误消息 "Illegal variable name" 。我在变量名称后尝试了不同的间距,还尝试了 $()%.* 而不是 sed 来删除最后四个字母,但在 cshell 中都不起作用。还尝试在 "" 中设置声明,但无济于事。我真的很绝望...

#!/bin/csh
set FILE_IN = file.ext
set SOURCE = home/Developer
set FILE_IN_B=`sed '/.\{4\}$//' >>> "$FILE_IN"`.lat
set REC = `grep -C 1 'I=11' "$SOURCE/Lattice/$FILE_IN_B" | cut -d ' ' -f 3 | cut -d= -f 2| sed 's/sp//'`

csh 有一些内置的变量操作,包括用于删除扩展名的操作:

% set FILE_IN=file.ext
% set FILE_IN_B="${FILE_IN:r}.lat"
% echo "$FILE_IN_B"
file.lat

如果需要sed那么printf可以作为标准输入,类似于可移植的sh:

% set FILE_IN=file.ext
% set FILE_IN_B=`printf %s "$FILE_IN" | sed 's/.\{4\}$//'`.lat
% echo "$FILE_IN_B"
file.lat