获取字符 sed 之间的字符串



我有一个字符串

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

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

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/^.#//; s/-.$//'

但它仅在 # 之前有空格时才有效,在这种情况下并非如此。

我做错了什么?

尝试使用

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

这将搜索"#"之前的所有内容,后跟零个或多个数字,后跟该行的其余部分。因此,搜索字符串与整行匹配。

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

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

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

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

试试这个:

echo "abcxyz1file.txt#4 - blah blah blah" | sed -e "s|.*#||g" -e "s| -.*||g"

最新更新