我需要grep
为空格和文件扩展名之间存在的文件名。示例:
[meghanak@cycrh6rtp32 CIT]$ echo -e "Akqmskdnlcn shddhjshd.py" | grep "[[:space:]]*.py"
-e Akqmskdnlcn shddhjshd.py
但是我想要的结果是:
shddhjshd.py
答案 0 :(得分:0)
$ echo -e "Akqmskdnlcn shddhjshd.py" | grep -o "[^[:space:]]*\.py"
shddhjshd.py
^
将否定捕获组。使用[:space:]
意味着字符而不是空格。
-o
仅用于打印匹配的内容。
答案 1 :(得分:0)
如果您可以在grep之后使用其他工具,则cut
可以使此操作非常简单:
$ echo -e "Akqmskdnlcn shddhjshd.py" | grep "[[:space:]]*.py" \
| cut -d' ' -f2
shddhjshd.py
如果只需要使用grep
,则可以转过头来匹配“ .py”之前的任何“非空格”非空格(\ S),然后使用-o标志进行pring比赛,就在那里:
$ echo -e "Akqmskdnlcn shddhjshd.py" | grep -o "\S*.py"
shddhjshd.py
答案 2 :(得分:0)
使用Awk
$echo "Akqmskdnlcn shddhjshd.py" | awk -F' ' '{print $2}'
shddhjshd.py
或
echo "Akqmskdnlcn shddhjshd" | awk -F' ' ' $2 ~ /.*.py/{print $2}'