【发布时间】:2022-01-27 17:31:48
【问题描述】:
我正在使用以下命令删除文件中的一行,该行部分在脚本中工作,但完全在 shell 中。
cat "$folderDb.list" | sed "/^$elementToDeleteKey /d" > "$folderDb.list-d"
$elementToDeleteKey 后面的空格是必须的,因为文件的结构如下:
KEY_WITHOUT_SPACES INFO1 INFO2 INFO3...
当键是文件(其中空格被下划线替换)时,在我的脚本中执行的这段代码会删除该行,但当它是文件夹时则不会(这里的替换相同)。我知道这无关紧要,因为在这种情况下,它们都被视为字符串。
在 shell 中手动执行的这段代码输出了我想要的结果:该行被删除了。
输入文件
/share/homes/test/test1/backup.conf 4 979 Jan 20 15:02:05 2022 /share/homes/test/test1/backup.conf
/share/homes/test/test1/backups.sh 4 843 Feb 19 23:25:02 2019 /share/homes/test/test1/backups.sh
/share/homes/test/test1/test2 8 4096 Jan 26 11:46:21 2022 /share/homes/test/test1/test2
/share/homes/test/test2 8 4096 Jan 26 11:46:21 2022 /share/homes/test/test2
/share/homes/test/test1 8 4096 Jan 27 12:21:20 2022 /share/homes/test/test1
/share/homes/test/test1/test2/backup.conf 4 324 Mar 17 23:06:42 2016 /share/homes/test/test1/test2/backup.conf
elementToDeleteKey
/share/homes/test/test2
/share/homes/test/test1/test2/backup.conf
第一个是文件夹,第二个是文件,但正如我所说,从这个角度来看,它们都是字符串。
elementToDeleteKey 在传递给 sed 之前被反斜杠。所以它给出了:
\/share\/homes\/test\/test2
\/share\/homes\/test\/test1\/test2\/backup\.conf
我很困惑!有人解释一下吗?
【问题讨论】:
-
我们无法重现这一点。请edit 向minimal reproducible example 提供一个简单的输入文件,该文件可以重现问题,并且所有变量都已完全填充。
-
今天拯救一只猫。 sed 已经可以打开文件了:
sed "/^$elementToDeleteKey /d" "$folderDb.list" > "$folderDb.list-d" -
@tripleee 我添加了我的测试“.list”文件的内容和变量
elementToDeleteKey -
@knittl 我救了一只猫,但动物没有救我。
-
请将您的代码从您的脚本复制粘贴到您的 shell 中,或者从您的 shell 中复制粘贴到您的脚本中,看看差异是否仍然存在。 95% 的情况下,问题是 1. 发现在 shell 中工作的东西,2. 在脚本中用循环、变量、文件输入等重写它,3. 发现脚本不起作用,4. 假设问题是因为它在脚本中而不是被重写