我有一个简单的sed脚本,我用一个变量动态替换我的应用程序中的一堆行,该变量是一个字符串列表。我的函数工作但不保留原始缩进。该函数删除行如果它包含特定的字符串,并用一个全新的行替换该行,由于某些语法限制,我无法进行替换。
如何在更换线路时保留原始缩进
我可以大写我的变量并动态删除下划线,即标题是变量名的大写和下划线删除版本,变量数组中的项目列表真的很长所以我试图做这是一次性的。 例如:我想要report_type - >报告类型在过程中完成
有没有更好的方法来解决这个问题?感谢任何非常感谢的投入。 sed功能如下
variableName=$1
sed -i "/name\=\"${variableName}\.name\" value\=model\.${variableName}\.name options\=\@lists\./c\\{\{\> \_dropdown title\=\"${variableName}\" required\=true name\=\"${variableName}\"\}\}" test
示例输入
{{> _select title="Report Type" required=true name="report_type.name" value=model.report_type.name options=@lists.report_type}}
示例预期的OUPUT
{{> _dropdown title="Report Type" required=true name="report_type" value=model.report_type.name}}
示例输入变量 REPORT_TYPE
答案 0 :(得分:1)
试试这个:
sed -E "s/^(\s+).*name\=\"(report_type)\.name\" value\=model\.report_type\.name options\=\@lists\..*$/\1\{\{\> \_dropdown title\=\"\2\" required\=true name\=\"\2\"\}\}/;T;s/\"(\w+)_(\w+)\"/\"\u\1 \u\2\"/g" input.txt > output.txt
我使用“report_type”代替${variableName}
进行测试,作为sed one-liner
请更改回${variableName}
。
然后返回使用-i
(除了-E
,这是用于扩展正则表达式)。
我不确定如果没有扩展的正则表达式我是否可以做到,请告诉我是否有必要。
s///
替换微调线T;
s///
""
,\u
制作驼峰案注意:
在样本输入上执行此操作会创建两条非常相似的行
我认为那是故意的。否则请提供所需的输出。
使用GNU sed版本4.2.1。
有趣的产出线:
{{> _dropdown title="Report Type" required=true name="Report Type"}}