标签: regular-expression

如何区分文件而忽略注释(以 # 开头的行)?

我有两个配置文件,一个来自包管理器的原始配置文件和一个由我自己修改的自定义配置文件。我添加了一些注释来描述行为。

如何diff在配置文件上运行,跳过注释?注释行定义为:

  • 可选的前导空格(制表符和空格)
  • 哈希符号(# )
  • 任何其他字符

跳过第一个要求的(最简单的)正则表达式是#.*. 我尝试了GNU diff 3.0的--ignore-matching-lines=RE( -I RE) 选项,但我无法让它与那个 RE 一起工作。我也尝试过.*#.*.*\#.*但没有运气。从字面上看,将 ( Port 631)行作为RE不匹配任何内容,将 RE 放在斜杠之间也无济于事。

正如“差异”工具中所建议的那样,正则表达式似乎缺乏?,我试过grep -G

grep -G '#.*' file
Run Code Online (Sandbox Code Playgroud)

这似乎与评论相符,但不适用于diff -I '#.*' file1 file2.

那么,这个选项应该如何使用呢?如何diff跳过某些行(在我的情况下,评论)?请不要建议greping 文件和比较临时文件。

diff regular-expression

63
推荐指数
3
解决办法
8万
查看次数

在 Ubuntu 中以“1”开头的 grep 行

我尝试搜索以“1”开头的行

ls -1 | grep ^1*
Run Code Online (Sandbox Code Playgroud)

但它返回不以 1 开头的行。我在这里缺少什么?

grep regular-expression

61
推荐指数
3
解决办法
26万
查看次数

在多个文件夹名称中查找文件

我正在尝试列出、和中的所有文件dir1,这些文件可能位于我使用该命令的子目录中的任何位置。我尝试了以下但没有成功:dir2dir3dir4cwdfind

find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'
Run Code Online (Sandbox Code Playgroud)

我也试过posix-extended了。如何列出这些文件?

bash find regular-expression

60
推荐指数
2
解决办法
11万
查看次数

简单的 sed 替换选项卡神秘地失败

这应该很简单,但由于某种原因它不起作用:

sed -i.bak -E 's/\t/  /' file.txt
Run Code Online (Sandbox Code Playgroud)

它不是替换制表符,而是替换t字符。我已经尝试了我能想到的所有变体,玩引用等。我在谷歌上搜索并发现其他人都使用非常相似的表达方式,他们似乎对他们有用。

-E是 OS X 的东西。我认为失败可能是 OS X 的一些奇怪怪癖的结果sed,所以我也用 Ruby 尝试了它(没有-i),并得到了相同的结果:

ruby -pe '$_.gsub!(/\t/,"  ")' < file.txt > file.new
Run Code Online (Sandbox Code Playgroud)

我在 OS X 和 iTerm 上使用 Bash 3.2.51,尽管我看不出其中任何一个是如何非常相关的。我没有设置任何奇怪的环境变量,但我可以发布您认为可能相关的任何环境变量。

可能有什么问题?

更新:当我尝试 Ruby 版本时,我一定犯了一些其他错误或错字,因为 Gilles 指出它确实有效(而且我从来没有让他误导我!)。我不确定发生了什么,但我很确定这一定是我的错误。

osx sed regular-expression

58
推荐指数
2
解决办法
9万
查看次数

[0-9], [[:digit:]] 和 \d 之间的区别

正则表达式维基百科的文章,似乎[[:digit:]]= [0-9]= \d

它们不相等的情况是什么?有什么不同?

经过一些研究,我认为一个区别是括号表达式[:expr:]依赖于语言环境。

regular-expression wildcards

58
推荐指数
4
解决办法
4万
查看次数

我怎样才能在文件中搜索这个或那个(2 件事)?

我有一个包含“then”和“there”的文件。

我可以

$ grep "then " x.x
x and then some
x and then some
x and then some
x and then some
Run Code Online (Sandbox Code Playgroud)

我可以

$ grep "there " x.x
If there is no blob none some will be created
Run Code Online (Sandbox Code Playgroud)

如何在一次操作中同时搜索两者?我试过

$ grep (then|there) x.x
Run Code Online (Sandbox Code Playgroud)

-bash: 意外标记附近的语法错误`('

grep "(then|there)" x.x
durrantm.../code
# (Nothing)
Run Code Online (Sandbox Code Playgroud)

grep regular-expression

55
推荐指数
2
解决办法
8万
查看次数

检查输入数字是否为整数

我试图检查一个输入是否是一个整数,我已经检查了它一百次,但没有看到这里的错误。唉,它不起作用,它会触发所有输入(数字/字母)的 if 语句

read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
        then
            echo "Sorry integers only"
fi
Run Code Online (Sandbox Code Playgroud)

我玩过引号,但要么错过了它,要么什么也没做。我做错了什么?有没有更简单的方法来测试输入是否只是整数?

bash quoting regular-expression test

53
推荐指数
6
解决办法
18万
查看次数

用vim / sed中的单个空行替换多个空行

问题或多或少说明了一切。我知道这/^$/d会删除所有空行,但我不知道怎么说“用一个空行替换两个或多个空行”

有任何想法吗?

vim sed regular-expression

52
推荐指数
3
解决办法
2万
查看次数

使用 VIM 替换,重用部分搜索模式

我正在使用VIm并尝试设置一个搜索和替换命令来进行一些替换,我可以在其中重新使用作为我的搜索字符串一部分的正则表达式。

一个简单的例子是一条线,我想更换(10){10},其中10可以是任何数字。

我来了这么远

  .s/([0-9]*)/what here??/
Run Code Online (Sandbox Code Playgroud)

这与我想要的部分完全匹配。

现在更换,我试过了

  .s/([0-9]*)/{\0}/
Run Code Online (Sandbox Code Playgroud)

但是,这作为输出 {(10)}

然后,我试过了

 .s/(\zs[0-9]*\ze)/{\0}/
Run Code Online (Sandbox Code Playgroud)

然而,这给了我({10}),我也关闭了,但不是我想要的。

我想我需要一些其他类型的标记/反向引用而不是 this \0,但我不知道在哪里看。所以问题是,这可以在 vim 中完成吗,如果可以,怎么做?

vim vi regular-expression replace

52
推荐指数
1
解决办法
7万
查看次数

Vim - 如何用两个 \n 替换一个新行 \n

在 vim 编辑器中,我想使用 vim 命令模式用两个换行符 (\n\n) 替换换行符 (\n)。

输入文件内容:

This is my first line.
This is second line.
Run Code Online (Sandbox Code Playgroud)

我试过的命令:

:%s/\n/\n\n/g
Run Code Online (Sandbox Code Playgroud)

它用不需要的字符替换字符串作为

This is my first line.^@^@This is second line.^@^@
Run Code Online (Sandbox Code Playgroud)

然后我尝试了以下命令

:%s/\n/\r\r/g
Run Code Online (Sandbox Code Playgroud)

它工作正常。你能解释为什么它可以用第二个命令正常工作吗?

vim regular-expression vi-mode

51
推荐指数
5
解决办法
8万
查看次数

标签 统计

regular-expression ×10

vim ×3

bash ×2

grep ×2

sed ×2

diff ×1

find ×1

osx ×1

quoting ×1

replace ×1

test ×1

vi ×1

vi-mode ×1

wildcards ×1