#!/bin/bash
files=`find ./ -type f`
from='{trans("[ sometext ]")}'
to='{trans("sometext")}'
for i in $files
do
echo "file: $i";
sed -e 's/"$from"/"$to"/g' $i > "$i"_new;
mv "$i"_new $i;
done
这是我的剧本。 我想在许多文件中删除trans函数中的方括号。 我不知道如何逃避该字符串中的特殊字符。
任何人都可以帮我调试一下吗?
例如:
{trans("[ sometext ]")} --> {trans("sometext")}
{trans("[ sometext2 ]")} --> {trans("sometext2")}
{trans("[ sometext3 ]")} --> {trans("sometext3")}
编辑: 由于硬组合,我认为不重复。
答案 0 :(得分:0)
我建议删除循环,这会给你笨拙的文件名带来麻烦,而是使用https://{jirahost}/jira/rest/api/2/issue/{issuekey}/transitions?expand=transitions.fields
来调用sed所需的最少次数:
-exec {} +
这假设您的sed版本支持find . -type f -exec \
sed -E -i.bak 's/(\{trans\(")\[ *([^ ]*) *]("\)\})/\1\2\3/g' {} +
扩展正则表达式,-E
支持就地编辑(创建带后缀-i
的备份)。
该模式捕获三组:
.bak
通往开场广场的部分\{trans\("
非空格字符(符合您的示例[^ ]*
,sometext
和sometext2
)sometext3
关闭方括号后的部分中间的部分(方括号和前导/尾随空格)被删除。如您所见,需要转义各种正则表达式元字符,例如"\)\}
,{
和(
。
答案 1 :(得分:0)
使用bash,不需要sed。
find . -type f -exec bash -c 'for i do f="${i/[ /}";echo mv "$f" "${f/ ]/}";done' sh '{}' +