使用 Sed 将基本文件名解析为替换参数
Using Sed to Parse Base Filename into Replacement Argument
在包含两千多个文本文件的目录中工作,我需要将每个文本文件中的某个字符串从“template.cmp”替换为“actualfilename[=18=” ]”。例如,对于mdgen.cmp这样的文件,我需要将“template.cmp”的原始字符串更改为“mdgen”。
我试过以下命令无济于事:
sed -i 's/template.cmp/$(basename)' ./*
知道如何解决这个问题吗?
在单引号内,$(basename)
只是一个静态字符串。如果你想 运行 命令 basename
,你需要双引号,你需要给它传递一个参数,如果你想 trim 扩展,你需要传递两个参数。猜测一下你实际上想做什么,比如
for file in *; do
sed -i "s/template\.cmp/$(basename "$file" .cmp)/" "$file"
done
另请注意正则表达式中的点应该如何使用反斜杠或将其放入字符 class [.]
中进行正确转义;未转义的 .
完全匹配任何字符。
在包含两千多个文本文件的目录中工作,我需要将每个文本文件中的某个字符串从“template.cmp”替换为“actualfilename[=18=” ]”。例如,对于mdgen.cmp这样的文件,我需要将“template.cmp”的原始字符串更改为“mdgen”。
我试过以下命令无济于事:
sed -i 's/template.cmp/$(basename)' ./*
知道如何解决这个问题吗?
在单引号内,$(basename)
只是一个静态字符串。如果你想 运行 命令 basename
,你需要双引号,你需要给它传递一个参数,如果你想 trim 扩展,你需要传递两个参数。猜测一下你实际上想做什么,比如
for file in *; do
sed -i "s/template\.cmp/$(basename "$file" .cmp)/" "$file"
done
另请注意正则表达式中的点应该如何使用反斜杠或将其放入字符 class [.]
中进行正确转义;未转义的 .
完全匹配任何字符。