我有一个字符串
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"