0

我有一个字符串

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

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

abc\xyz\file.txt#4 - 等等等等等等| sed -e "s/[AZ,az,\,/,.#:,-/s]//g"

它给出了预期的输出 - 4

但是当字符串是 -

abc\xyz1\file.txt#4 - 等等等等等等| sed -e "s/[AZ,az,\,/,.#:,-/s]//g"

它给出的输出为 - 14。

所以我试图在'#'和'-'之间获取字符串我试过 -

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

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

我究竟做错了什么?

4

2 回答 2

3

尝试使用

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

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

然后,它将匹配模式(即整行)替换为与转义括号之间的子模式匹配的部分,即您要查找的机器人编号。

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

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

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

于 2013-09-12T01:01:04.153 回答
0

试试这个:

echo "abc\xyz1\file.txt#4 - blah blah blah" | sed -e "s|.*#||g" -e "s| -.*||g"
于 2013-09-12T01:05:12.297 回答