我正在尝试编写一个小shell脚本,首先使用date定义文件名,然后运行两个sed命令,删除某些字符。
我的代码如下:
filename=/var/local/file1/tsv_`date '+%d%m%y'`.txt
sed -i 's/\("[^,]*\)[,]\([^"]*"\)/\1\2/g' '&filename'
sed -i 's/\"//g' '&filename'
我收到以下错误:
sed: can't read &filename: No such file or directory
sed: can't read &filename: No such file or directory
问题是,如何将此文件名变量传递给sed命令?
由于
答案 0 :(得分:7)
在进行shell脚本编写时,用于引用变量& (&符号)未使用,但$(美元符号):
filename=/var/local/file1/tsv_`date '+%d%m%y'`.txt
sed -i 's/\("[^,]*\)[,]\([^"]*"\)/\1\2/g' "$filename"
sed -i 's/\"//g' "$filename"
同样在引用变量时,必须使用双引号,否则,bash不会解释$符号的含义。
答案 1 :(得分:1)
您希望在将变量传递给sed
时使用双引号。如果使用单引号,则将按字面读取变量。
要在命令中使用shell变量,请在前面加上美元符号($)。这告诉命令解释器你想要使用变量的值,而不是它的名字。
filename=/var/local/file1/tsv_`date '+%d%m%y'`.txt
sed -i 's/\("[^,]*\)[,]\([^"]*"\)/\1\2/g' "$filename"
sed -i 's/\"//g' "$filename"