想象一下,我有类似以下文字的内容:
2012 年和 2013 年快速的棕狐跳跃
我希望从“fox”中删除包括四个数字在内的部分,但只在第一次出现时删除,所以我最终得到:
快速棕色和 2013
有点像这样...:
回声“快速的棕色狐狸在2012年和2013年跳跃”\
| sed "s/fox.*\([0-9]\{4\}\)//g"
...带给我:
快速的棕色
所以它删除了所有内容,包括最后一次出现的四个数字。
有任何想法吗?
sed(“基本”和“扩展”版本)使用的 POSIX 正则表达式不支持非贪婪匹配。(尽管有一些变通方法,例如使用[^0-9]*代替.*,但如果输入变化很大,它们就会变得不可靠。)
您可以通过使用?非贪婪量词在 Perl 中实现:
echo "The quick brown fox jumps in 2012 and 2013" \
| perl -pe 's/fox.*?([0-9]{4})//g'
Run Code Online (Sandbox Code Playgroud)
您可能还希望删除额外的空间。
| 归档时间: |
|
| 查看次数: |
10521 次 |
| 最近记录: |