将filename变量传递给sed命令

时间:2015-08-21 08:18:21

标签: bash shell unix sed

我正在尝试编写一个小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命令?

由于

2 个答案:

答案 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"