获取字符sed之间的字符串

时间:2013-09-12 00:51:10

标签: sed

我有一个字符串

  

abc \ xyz \ file.txt#4 - blah blah blah

我想要文件编号,所以我做了以下内容 -

  

abc \ xyz \ file.txt#4 - blah blah blah | sed -e“s / [A-Z,a-z,\,/,。#:, - / s] // g”

它给出了预期的输出 - 4

但是当字符串是 -

  

abc \ xyz1 \ file.txt#4 - blah blah blah | sed -e“s / [A-Z,a-z,\,/,。#:, - / s] // g”

它输出为-14。

所以我试图在“#”和“ - ”之间加入字符串 我试过了 -

  

abc \ xyz1 \ file.txt#4 - blah blah blah | sed's / ^。#//;小号/-. $ //'

但只有在#之前有空格时才有效,在这种情况下不是这样。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

尝试使用

sed 's/.*#\([0-9]*\).*/\1/'

这将搜索所有内容,包括`#,后跟零个或多个数字,然后是该行的其余部分。所以搜索字符串匹配整行。

然后将匹配模式(即整行)替换为与转义的parens之间的子模式匹配的部分,即您要查找的 droid 数字。 / p>

要仅打印匹配的行,请使用

sed -n 's/.*#\([0-9]*\).*/\1/p'

其中-n标志禁止打印每一行的默认行为,p后缀打印匹配的行。

答案 1 :(得分:0)

试试这个:

echo "abc\xyz1\file.txt#4 - blah blah blah" | sed -e "s|.*#||g" -e "s| -.*||g"