1

次のようにプロパティがリストされた(jadeテンプレート)ファイルのコレクションがあります。

a.btn(data-ng-class = "{true:'black', false:'blue'}[viewModel.currentDictionaryUid == '<%= full.uid %>']", href = "#<%= viewRoot %>/<%= full.uid %>")

それらを次のように変換する簡単な方法を探しています。

a.btn(data-ng-class = "{true:'black', false:'blue'}[viewModel.currentDictionaryUid == '<%= full.uid %>']"
      href          = "#<%= viewRoot %>/<%= full.uid %>")

カンマで区切られたすべてのプロパティは別々の行になり、キーはすべて左から同じ x 文字数で始まり、等号もすべて左から同じ x 文字数で始まります。

- - 編集:

テスト ファイルの例:

html
  body
    // HEADER GOES HERE
    .header.navbar.navbar-inverse.navbar-fixed-top(style = "z-index:1001;", data-ng-controller = "ControllerWidgetCoreHeader", data-ng-include = "'viewWidgetCoreHeader'")
    .page-container.row-fluid(data-ng-class = "{'sidebar-closed':sidebarClosed}")
      // LEFT MENU GOES HERE
      .page-sidebar.nav-collapse.collapse(data-ng-hide = "quizMode", data-ng-class = "{'in':topBarOpen}", style = "z-index:1000;", data-ng-controller = "ControllerWidgetCoreLeftMenu", data-ng-include = "'viewWidgetCoreLeftMenu'")
      .page-content(data-ng-class = "{'page-content-quiz-mode':quizMode}")
        // PAGE CONTENT GOES HERE
        .container-fluid(data-ng-controller = "ControllerCoreWidgets", data-ng-include = "'viewCoreWidgets'")
    .footer(data-ng-show = "false", data-ng-controller = "ControllerWidgetCoreFooter", data-ng-include = "'viewWidgetCoreFooter'")

発生しているエラー: (Mac OSX 10.8.4)

Casey-Flynns-MacBook-Air:views casey$ sed -i'' 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade
sed: 1: "viewsDirectives/viewCol ...": invalid command code v

また、単一のファイルで:

Casey-Flynns-MacBook-Air:views casey$ sed -i'' 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' viewCore.jade
sed: 1: "viewCore.jade": invalid command code v
4

2 に答える 2

2

これが役立つかどうかはわかりませんが、次のようなことを試すことができます:

awk -v RS="," '{ print $0 }' file | column -t | awk '!/=/ {$1=$1}1'

テスト:

$ cat file
html
  body
    // HEADER GOES HERE
    .header.navbar.navbar-inverse.navbar-fixed-top(style = "z-index:1001;", data-ng-controller = "ControllerWidgetCoreHeader", data-ng-include = "'viewWidgetCoreHeader'")
    .page-container.row-fluid(data-ng-class = "{'sidebar-closed':sidebarClosed}")
      // LEFT MENU GOES HERE
      .page-sidebar.nav-collapse.collapse(data-ng-hide = "quizMode", data-ng-class = "{'in':topBarOpen}", style = "z-index:1000;", data-ng-controller = "ControllerWidgetCoreLeftMenu", data-ng-include = "'viewWidgetCoreLeftMenu'")
      .page-content(data-ng-class = "{'page-content-quiz-mode':quizMode}")
        // PAGE CONTENT GOES HERE
        .container-fluid(data-ng-controller = "ControllerCoreWidgets", data-ng-include = "'viewCoreWidgets'")
    .footer(data-ng-show = "false", data-ng-controller = "ControllerWidgetCoreFooter", data-ng-include = "'viewWidgetCoreFooter'")

$ awk -v RS="," '{ print $0 }' file | column -t | awk '!/=/ {$1=$1}1'
html
body
// HEADER GOES HERE
.header.navbar.navbar-inverse.navbar-fixed-top(style  =       "z-index:1001;"
data-ng-controller                                    =       "ControllerWidgetCoreHeader"
data-ng-include                                       =       "'viewWidgetCoreHeader'")
.page-container.row-fluid(data-ng-class               =       "{'sidebar-closed':sidebarClosed}")
// LEFT MENU GOES HERE
.page-sidebar.nav-collapse.collapse(data-ng-hide      =       "quizMode"
data-ng-class                                         =       "{'in':topBarOpen}"
style                                                 =       "z-index:1000;"
data-ng-controller                                    =       "ControllerWidgetCoreLeftMenu"
data-ng-include                                       =       "'viewWidgetCoreLeftMenu'")
.page-content(data-ng-class                           =       "{'page-content-quiz-mode':quizMode}")
// PAGE CONTENT GOES HERE
.container-fluid(data-ng-controller                   =       "ControllerCoreWidgets"
data-ng-include                                       =       "'viewCoreWidgets'")
.footer(data-ng-show                                  =       "false"
data-ng-controller                                    =       "ControllerWidgetCoreFooter"
data-ng-include                                       =       "'viewWidgetCoreFooter'")
于 2013-06-15T03:57:33.957 に答える
2

これをやってみてください:

sed 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade

必要に応じて、switchでインプレース置換を使用できます。-i

sed -i 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade

そして MacOsX バージョン (それ-iは奇妙な方法でスイッチを扱います):

sed -i'' 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade
于 2013-06-15T03:14:59.327 に答える