带有regex find/replace的Bash脚本,用于垂直对齐文件中的赋值运算符
我有一组(jade模板)文件,其属性如下:带有regex find/replace的Bash脚本,用于垂直对齐文件中的赋值运算符,regex,bash,replace,preg-replace,Regex,Bash,Replace,Preg Replace,我有一组(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'}[viewMod
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 %>")
我遇到的错误:(Mac OSX 10.8.4) 也在单个文件上:
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
尝试这样做:
sed 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade
如果它符合您的需要,您可以使用带-i
开关的就地替换:
sed -i 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade
和MacOsX版本():
尝试这样做:
sed 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade
如果它符合您的需要,您可以使用带-i
开关的就地替换:
sed -i 's@,\s\+\([a-z]\+\)\s\+=@\n\t\1 =@g' **/*.jade
和MacOsX版本():
不确定这是否有帮助,但您可以尝试以下方法:
awk -v RS="," '{ print $0 }' file | column -t | awk '!/=/ {$1=$1}1'
测试:
不确定这是否有帮助,但您可以尝试以下方法:
awk -v RS="," '{ print $0 }' file | column -t | awk '!/=/ {$1=$1}1'
测试:
谢谢,但第二个属性可能并不总是href。有时会有15个属性显示此错误:Casey Flynns MacBook Air:views Casey$sed's@、\s\+[a-z]\+\s\+=\n\t\1=@g'*/。jade sed:1:“s@、\s\+[a-z]\+\s\+=\n\…”:\1在RENot中没有定义看起来它有任何效果,命令会将文件回显到终端。我看到的是:data calendar=“data calendar”,data activate watch=“!(viewModel.routeParams.eventUid | | viewModel.showNewExerciseForm)”,data options=“viewModel.fullCalendarOptions”,data refetch on post=“event”,data refetch on put=“event”,data update on change=“viewModel.fullCalendarOptions.changeIncrementor”你完全读过我的帖子了吗?您需要-i开关,就像已经解释过的那样,使用和不使用-i参数对其进行编辑谢谢,但是第二个属性可能并不总是href。有时会有15个属性显示此错误:Casey Flynns MacBook Air:views Casey$sed's@、\s\+[a-z]\+\s\+=\n\t\1=@g'*/。jade sed:1:“s@、\s\+[a-z]\+\s\+=\n\…”:\1在RENot中没有定义看起来它有任何效果,命令会将文件回显到终端。我看到的是:data calendar=“data calendar”,data activate watch=“!(viewModel.routeParams.eventUid | | viewModel.showNewExerciseForm)”,data options=“viewModel.fullCalendarOptions”,data refetch on post=“event”,data refetch on put=“event”,data update on change=“viewModel.fullCalendarOptions.changeIncrementor”你完全读过我的帖子了吗?你需要-i切换,就像已经解释过的那样,在有-i参数和没有-i参数的情况下切换
$ 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'")