我想在通常有很长行的HTML文件上运行ack或grep.我不想看到很长的线条反复包裹.但我确实希望看到围绕与正则表达式匹配的字符串的长行的那一部分.如何使用任何Unix工具组合获得此功能?
我不确定它的用途,但我正在处理的代码有一堆名为"save.d"的文件夹,看起来它们用于某种版本控制(我们也有.svn文件夹) .
如何更新我的.ackrc文件以默认忽略这些目录?
我的.ackrc目前
--type-set=inc=.inc
--ignore-dir=pear
--type-set=tpl=.tpl
Run Code Online (Sandbox Code Playgroud)
我们的文件夹结构如下:
program/parsers/save.d
program/modules/save.d
Run Code Online (Sandbox Code Playgroud) 我从未使用过Perl,但我对ack印象深刻,我想用它来搜索源代码等.
任何人都可以指导我如何在Windows上使用这个优秀的库?
我在Vim中使用Ack插件,这有助于我快速搜索项目中的字符串.但是,有时我想替换找到的字符串的全部或部分出现.您可以使用像这样的Vim arglist进行某种全局搜索和替换(源代码):
:args app/views/*/*
:argdo %s/, :expire.*)/)/ge | update
Run Code Online (Sandbox Code Playgroud)
但args我不想使用,而是希望通过Ack进行搜索,然后在找到的所有文件中进行替换.有没有办法像argdo命令一样做?
我的文件夹结构如下所示:
/app
/app/data
...
/app/secondary
/app/secondary/data
Run Code Online (Sandbox Code Playgroud)
我想递归搜索/app,包括/app/data.但我不想搜索/app/secondary/data.这就是我到目前为止:
ack --ignore-dir=data searchtext
ack --ignore-dir=secondary/data searchtext
Run Code Online (Sandbox Code Playgroud)
第一个命令忽略两个目录,第二个命令忽略它们.在app文件夹中,我的ack命令应该是什么样的?
使用普通grep命令有一个--exclude选项(这里详细介绍:使用grep --exclude/ - include语法来不通过某些文件),可以让你在grepping时忽略特定的文件.
Ack的--type选项可以处理95%你想要排除文件的情况,但它没有(据我所知)处理排除特定文件的情况.我有一个已编译的JS文件,其中包含其他每个JS文件的内容(在一行上),所以每当我grep 任何东西时,我都会找回那个巨大的编译文件的全部内容.
我不想放弃ack并回过头来讨论这个问题,但这真的很烦人.请有人告诉我,有一种方法可以从ack搜索中排除特定文件.
我确定我对ack的文件/目录忽略默认值有些误解,但也许有人可以为我阐明一下:
mbuck$ grep logout -R app/views/
Binary file app/views/shared/._header.html.erb.bak.swp matches
Binary file app/views/shared/._header.html.erb.swp matches
app/views/shared/_header.html.erb.bak: <%= link_to logout_text, logout_path, { :title => logout_text, :class => 'login-menuitem' } %>
mbuck$ ack logout app/views/
mbuck$
Run Code Online (Sandbox Code Playgroud)
而...
mbuck$ ack -u logout app/views/
Binary file app/views/shared/._header.html.erb.bak.swp matches
Binary file app/views/shared/._header.html.erb.swp matches
app/views/shared/_header.html.erb.bak
98:<%= link_to logout_text, logout_path, { :title => logout_text, :class => 'login-menuitem' } %>
Run Code Online (Sandbox Code Playgroud)
简单地在ack没有选项的情况下调用无法在.bak文件中找到结果,但使用该--unrestricted选项调用可以找到结果.据我所知,ack .bak默认不会忽略文件.
UPDATE
感谢下面的有用评论,以下是我的新内容~/.ackrc:
--type-add=ruby=.haml,.rake --type-add=css=.less
我把它放在我的.ackrc中:
--type-set=DUMB=*.orig
--noDUMB
Run Code Online (Sandbox Code Playgroud)
...但我仍然在我的ack结果中看到像main.py.orig这样的文件.我也尝试--type-set=DUMB=*.*.orig过,但这也不起作用.
更多信息
从我的命令行运行(OSX Snow Leopard:
timmfin at lorien in ~/dev/performable/rafa on landing-pages-csv-and-more!
± ack modules --python | grep '.orig'
src/rafa/main.py.orig:25:import rafa.ui.modules.helpers
src/rafa/main.py.orig:26:from rafa.ui.modules.performable_form import PerformableForm
src/rafa/main.py.orig:27:from rafa.ui.modules.page_form import PageEditForm
src/rafa/main.py.orig:28:from rafa.ui.modules.settings_form import SettingsForm
....
timmfin at lorien in ~/dev/performable/rafa on landing-pages-csv-and-more!
± cat ~/.ackrc
--color
--sort-files
--smart-case
--type-set=sass=.sass
--type-set=coffee=.coffee
--ignore-dir=rafa/static
--ignore-dir=compiled
--ignore-dir=compressed
--ignore-dir=venv
--ignore-dir=build
timmfin at lorien in ~/dev/performable/rafa on landing-pages-csv-and-more!
± ack --version
ack 1.94
Running under Perl 5.10.0 at /usr/bin/perl
Run Code Online (Sandbox Code Playgroud) 是否可以忽略Ack中的多个目录,而不重复标记?
例如,我知道以下工作(即设置多个标志):
ack --ignore-dir=install --ignore-dir=php 'teststring'
Run Code Online (Sandbox Code Playgroud)
我希望我可以用逗号分隔目录,就像我可以使用扩展程序,如下所示:
ack --ignore-file=ext:css,scss,orig 'teststring'
Run Code Online (Sandbox Code Playgroud)
但是,以下逗号分隔的忽略标志不起作用:
ack --ignore-dir=install,php 'textstring'
Run Code Online (Sandbox Code Playgroud)
是否可以使用一些短手等效,所以我不必重复输入--ignore-dir标志?