【问题标题】:sed replace a stringsed 替换一个字符串
【发布时间】:2020-01-12 23:39:45
【问题描述】:

我有以下sn-p

angular.module('workflow-render', ['ng'] ).directive('workflowRender', ['$parse', '$http', '$sce', '$timeout', function ($parse, $http, $sce, $timeout) {
  return {
    restrict: 'EA',
    replace: false,
    scope: {
      retVal : '='
    },
    template: '<div data-ng-if="displayError" style="min-height:150px;"><center><span data-i18n-content="{bundle : \'widgets\', key : \'workflow/Error\'}"></span></center></div>',
    link: function($scope, elem, attrs) {
      $scope.$watch( 'retVal' , function( newVal ) {
        if ( newVal ) {
          Render($scope.retVal);
        }

我想换行

template: '<div data-ng-if="displayError" style="min-height:150px;"><center><span data-i18n-content="{bundle : \'widgets\', key : \'workflow/Error\'}"></span></center></div>

template: '<div data-ng-if="displayError" style="min-height:150px;"><center><span style="color:darkolivegreen;font-weight:bold">Sorry, unable to render workflow due to presence of cyclic workflow transition. We will fix this soon.</span></center></div>

我尝试了类似问题的建议,但找不到反引号特殊字符的方法。

请帮助。谢谢

【问题讨论】:

  • 如果只有一个“中心”出现,我想您至少可以简化要替换为center.* 的字符串。
  • 彼得,你能详细说明一下吗?
  • 请展示您的尝试。

标签: string bash sed


【解决方案1】:

请尝试以下方法:

org=$(cat << 'EOS'
template: '<div data-ng-if="displayError" style="min-height:150px;"><center><span data-i18n-content="{bundle : \'widgets\', key : \'workflow/Error\'}"></span></center></div>'
EOS
)

repl=$(cat << 'EOS'
template: '<div data-ng-if="displayError" style="min-height:150px;"><center><span style="color:darkolivegreen;font-weight:bold">Sorry, unable to render workflow due to presence of cyclic workflow transition. We will fix this soon.</span></center></div>'
EOS
)

org=$(sed 's#\\#\\\\#g' <<< "$org")
repl=$(sed 's#\\#\\\\#g' <<< "$repl")
sed "s#$org#$repl#" sample.txt

结果:

angular.module('workflow-render', ['ng'] ).directive('workflowRender', ['$parse', '$http', '$sce', '$timeout', function ($parse, $http, $sce, $timeout) {
  return {
    restrict: 'EA',
    replace: false,
    scope: {
      retVal : '='
    },
    template: '<div data-ng-if="displayError" style="min-height:150px;"><center><span style="color:darkolivegreen;font-weight:bold">Sorry, unable to render workflow due to presence of cyclic workflow transition. We will fix this soon.</span></center></div>',
    link: function($scope, elem, attrs) {
      $scope.$watch( 'retVal' , function( newVal ) {
        if ( newVal ) {
          Render($scope.retVal);
        }

这种方法的好处是您可以在脚本中按原样编写替换器和替换器,而无需手动修改转义序列。

【讨论】:

  • 你能解释一下下面这行的实际作用吗? org=$(sed 's#\\#\\\\#g'
  • 为了使解释更容易,请假设变量$org 被分配给单个反斜杠\,并且您想用破折号- 替换它。在这种情况下,sed '#\#-#' 不起作用,因为单个 \ 被视为转义下一个字符 #。为了表达文字反斜杠,您需要说sed '#\\#-#'。句子 org=$(sed 's#\\#\\\\#g' &lt;&lt;&lt; "$org") 通过 加倍 反斜杠的数量来实现。
  • 替换部分也需要同样的处理,尽管模板文本不包含反斜杠。为了以防万一,我在答案中添加了repl=$(sed 's#\\#\\\\#g' &lt;&lt;&lt; "$repl") 句子。
  • 感谢@tshiono。我可以理解它现在。除了sed,我还了解了的用法
【解决方案2】:
sed -E -i 's@<span.*</span>@<span style="color:darkolivegreen;font-weight:bold">Sorry, unable to render workflow due to presence of cyclic workflow transition. We will fix this soon.</span>@g' filename.xml

我认为这就是您要寻找的。 -E 启用正则表达式,据我所知,您想替换 &lt;span&gt;&lt;/span&gt; 部分

【讨论】:

    【解决方案3】:

    -i s/pattern/replacepattern/g

    【讨论】:

      猜你喜欢
      • 2017-11-21
      • 2020-03-13
      • 2011-12-21
      • 2020-07-28
      • 1970-01-01
      • 2018-05-07
      • 2012-10-09
      • 2015-01-17
      • 2012-12-21
      相关资源
      最近更新 更多