Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Sed将原始缩进和驼峰式大小写保留为变量_Bash_Shell_Sed - Fatal编程技术网

Bash Sed将原始缩进和驼峰式大小写保留为变量

Bash Sed将原始缩进和驼峰式大小写保留为变量,bash,shell,sed,Bash,Shell,Sed,我有一个简单的sed脚本,我正在用一个变量动态地替换应用程序中的一堆行,变量是字符串列表。我的函数可以工作,但不保留原始缩进。如果它包含某个字符串,该函数将删除该行,并用一个全新的行替换该行,由于某些语法限制,我无法进行替换 替换线条时,如何保留原始缩进 我是否可以将变量大写并动态删除下划线,即标题是variableName的大写和下划线删除版本,变量数组中的项目列表非常长,因此我尝试一次性完成此操作。 例如:我希望报告类型->报告类型在过程中完成 有没有更好的方法用sed解决这个问题?非常感谢

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

  • 替换线条时,如何保留原始缩进

  • 我是否可以将变量大写并动态删除下划线,即标题是variableName的大写和下划线删除版本,变量数组中的项目列表非常长,因此我尝试一次性完成此操作。 例如:我希望报告类型->报告类型在过程中完成

  • 有没有更好的方法用sed解决这个问题?非常感谢您的任何意见。 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}}
    
    预期输出样本

          {{> _dropdown title="Report Type" required=true name="report_type" value=model.report_type.name}}
    
    样本输入变量 报告类型

    尝试以下方法:

    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\u type”而不是
    ${variableName}
    作为sed单行程序进行测试。
    请更改回
    ${variableName}

    然后返回到使用
    -i
    (除了用于扩展正则表达式的
    -E
    )。 我不确定我是否能在没有扩展正则表达式的情况下完成它,如果有必要,请告诉我

    • 使用
      s//
      替换微调线
    • 进行缩进的空白区域的第一个捕获组
    • 变量名的第二个捕获组
    • 如果没有替换任何内容,则停止,
      T
    • 另一个
      s//
    • 查找仅由

      之间的字母组成的内容 在两个部分之间有一个“u”符号,
      似乎足够安全,因为此步骤仅在已更换的生产线上执行
    • 替换为两部分,不带“\u1”
    • \u
      用于制作驼峰盒
    注:
    对示例输入执行此操作会创建两条非常相似的行。
    我想这是故意的。否则,请提供所需的输出

    使用GNU sed版本4.2.1

    有趣的输出行:

          {{> _dropdown title="Report Type" required=true name="Report Type"}}
    

    我们不需要额外的样本数据。你不能用3-4个单词的示例输入和预期输出来描述这一点吗?祝你好运。哈哈,很抱歉你说得很对,一个简单的输入和输出会让大家的生活更轻松。嘿,这正是我想要的标题输出,我想保留为报告类型的名称,但我应该能够使用它,非常感谢!!!!而且这看起来很复杂啊,很高兴它足够好了。我并没有那个么“优雅”或“快速”或“高效”,仍然在“以某种方式完成任务”上爬行。你可能需要一个awk解决方案。如果您用更多的示例输入行(可能是单个相关输入行;-)和所需的输出更新问题,如果您愿意,我将进行微调。如果你简化了,那么我也可以更直接地进行测试。嘿,如果你想再次尝试并进行微调,我将问题更新为更简洁的loo,如果不担心的话,我非常感谢你的帮助。我不确定我是否正确地得到了应该从可变内容派生的内容以及应该是文字的内容。请尝试
    sed-E“s/^(\s*)\{{>\u选择(title=)(\”[:alpha:]+(\”必选=真名=)([[:alpha:]+)\([:alpha:]+)(\.name)。*$/\1\{\{\>\u下拉列表\2\3\u\5\u\6\4\5\u6\3值=模型。\5\u6\7}/;”input.txt>output.txt
    。这根本不使用变量内容。我们可以使用一个条件,以便仅当变量内容在行内时才进行替换。