【问题标题】:Pass filename variable into sed command将文件名变量传递给 sed 命令
【发布时间】:2015-08-21 08:18:21
【问题描述】:

我正在尝试编写一个小的 shell 脚本,它首先使用日期定义一个文件名,然后运行两个 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 命令?

谢谢

【问题讨论】:

  • 请将您帖子的其中一个答案标记为已接受答案,以便您的帖子显示为已解决。谢谢。

标签: bash shell unix sed


【解决方案1】:

在编写 shell 脚本时,引用变量时不使用 &(与号),而是使用 $(美元符号):

filename=/var/local/file1/tsv_`date '+%d%m%y'`.txt
sed -i 's/\("[^,]*\)[,]\([^"]*"\)/\1\2/g' "$filename"
sed -i 's/\"//g' "$filename"

同样在引用变量时,必须使用双引号,否则bash不会解释$符号的含义。

【讨论】:

    【解决方案2】:

    您希望在将变量传递给sed 时使用双引号。如果使用单引号,则变量将按字面意思读取。

    要在命令中使用 shell 变量,请在其前面加上美元符号 ($)。这告诉命令解释器您希望使用变量的值,而不是其名称。

    filename=/var/local/file1/tsv_`date '+%d%m%y'`.txt
    sed -i 's/\("[^,]*\)[,]\([^"]*"\)/\1\2/g' "$filename"
    sed -i 's/\"//g' "$filename"
    

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 2017-12-15
      • 2017-03-10
      • 2019-09-11
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多