小编Ven*_*pam的帖子

从 Find "-exec" 调用时,流水线 Sed 在 Bash 命令替换中对找到的文件名不起作用

在某些情况下,'find'、'bash' 和 'sed' 看起来不像人们预期的那样工作。

下面的例子应该首先创建文件'sample.txt',然后找到该文件,最后通过'-exec'命令处理它。执行的命令打印找到的文件名、测试样本和修改后的文件名。'sed' 命令本身用于将 'txt' 替换为 'TXT'。

touch sample.txt
find ./ -maxdepth 1 -name "*.txt" -exec echo {} $(echo Specimen_before.txt {} Specimen_after.txt |sed -e "s/txt/TXT/g") \;
Run Code Online (Sandbox Code Playgroud)

预期的输出是:

./sample.txt Specimen_before.TXT ./sample.TXT Specimen_after.TXT

相反,它产生:

./sample.txt Specimen_before.TXT ./sample.txt Specimen_after.TXT

(该示例还通过反引号 '`' 使用老式命令替换进行了测试,结果相同)

我究竟做错了什么?

bash pipe sed command-substitution

5
推荐指数
1
解决办法
264
查看次数

标签 统计

bash ×1

command-substitution ×1

pipe ×1

sed ×1