【问题标题】:Get lines that end with "$" in a text file获取文本文件中以“$”结尾的行
【发布时间】:2014-02-26 15:01:20
【问题描述】:

我有这样的输出:

a/foo bar /
b/c/foo sth /xyz
cc/bar ghj /axz/byz

我想要的只是这一行:

a/foo bar /

为了更清楚,我想要那些以特定字符串结尾的行。我想grep 在最后一列有/ 字符的行。

【问题讨论】:

  • 您选择该行而不是其他行的标准是什么?
  • 编辑了问题。我想要一条线,以一些特殊的图案结尾
  • 如果该行是“a/foo bar bb/”,你要显示它吗?你的要求“我想在最后一列有一个“/”字符的 grep 行”实际上你在你显示的所有三行输出的最后一列都有“/”字符......可能是你的要求可以被纠正更清楚的方式?谢谢
  • 可能是我误解了列的定义...。您输出的所有行都是由空格分隔的 3 列吗?
  • 也许是,也许不是。重要的是,该行应以“/”字符结尾。

标签: linux shell grep


【解决方案1】:

你可以像这样使用$

$ grep '/$' file
a/foo bar /

$ 代表行尾,/$ 匹配最后一个字符为 / 的行。

【讨论】:

  • 清晰简单的解决方案。我会标记它,但我必须等待 8 分钟。
  • 该死! 16 分钟 8 次投票。你在滚动@fedorqui! 编辑:很抱歉刚刚读到您已达到上限。嗅嗅
【解决方案2】:
grep '/$'

斜杠不是 grep 的特殊字符$ 表示行尾的匹配表达式。


您甚至可以在 last column 上用 only backlash grep 最后一列(但不是该行中的唯一一列)

我假设一行的最后一列是一个字符串,前面有多个空格,并且后面没有字符 字符串。如果该行只有一列,则此假设满足要求,因为它不需要空间如果只有一列,则在它前面显示它是最后一列。

通过启用perl正则表达式(-P),

grep -P '\s+/$'

\s 表示匹配任何空白字符(空格、制表符、换行符)

加号表示匹配前面的元素1次或多次

$ 表示字符串结束

参考Character Classes and Bracket Expressions

grep '[[:space:]]\+/$'

grep '[[:blank:]]\+/$'

‘[:blank:]’ 空白字符:空格和制表符。

‘[:space:]’ 空格字符:在‘C’语言环境中,这是制表符、换行符、 垂直制表符、换页、回车和空格。它是“\s”的同义词。

参考@fedorqui,]]后面的反斜杠用来和 文字+。感谢您的解释。

抱歉如果 perl 答案有误,因为我 从不 使用或学习 Perl 表达式,但真的希望能帮助您找到最后一列斜杠也许您可以阅读这些以获取更多信息以在行尾搜索带有斜杠的退格

grep with regexp: whitespace doesn't match unless I add an assertion

Regular expressions in Perl

【讨论】:

  • 任何人都可以帮我检查第二、第三和第四个命令是否可以得到带有斜杠字符的最后一列?因为我现在附近没有任何 Linux 机器并且渴望知道答案。谢谢
  • 是的,他们都在 GNU bash, version 4.2.45 上为我工作。
  • 酷,我尝试使用 grep 在线工具,但结果为阴性,顺便说一下,感谢您抽出时间帮助我测试。
  • 其实我有一点不明白,关于字符类和括号表达式的答案.....为什么在 ]] 之后需要有反斜杠? ]]之后是否可以省略反斜杠?我不知道它在那个表达中的实际含义。
  • 现在我看到您的尝试正在检查是否有斜线 之前是否有任何数量的空格。这是 OP 没有要求的。关于` itself, it is to distinguish with the literal +. That is, if you don't add it, it will look for a +/`的结尾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2010-10-18
相关资源
最近更新 更多