Sed保留原始缩进和骆驼套管变量

时间:2017-04-26 22:12:10

标签: bash shell sed

我有一个简单的sed脚本,我用一个变量动态替换我的应用程序中的一堆行,该变量是一个字符串列表。我的函数工作但不保留原始缩进。该函数删除行如果它包含特定的字符串,并用一个全新的行替换该行,由于某些语法限制,我无法进行替换。

  1. 如何在更换线路时保留原始缩进

  2. 我可以大写我的变量并动态删除下划线,即标题是变量名的大写和下划线删除版本,变量数组中的项目列表真的很长所以我试图做这是一次性的。 例如:我想要report_type - >报告类型在过程中完成

  3. 有没有更好的方法来解决这个问题?感谢任何非常感谢的投入。 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

1 个答案:

答案 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"}}