问题描述
我的目标是:
sed
应该用8次;
替换一行,但是当该行有9或7 ..则不应该。
我尝试了以下方法:
echo ";asdf;asdfsadf;sdafasdf;asdfsdfasd;;;;" | sed -E 's/((.*;.*){8})/ /p'
echo ";asdf;asdfsadf;sdafasdf;asdfsdfasd;;;;" | sed -E 's/\<(.*;.*){8}\>/ /p'
,但当行中有9个或更多;
时,则无效。
感谢您的帮助
解决方法
您可以使用
^([^;]*;){8}[^;]*$
此部分^([^;]*;){8}
重复8次,匹配0+次除;
以外的任何字符,然后匹配;
此后,它将再次匹配0+次除;
以外的所有字符,直到字符串结尾。
部分
-
^
字符串的开头 -
(
起始组-
[^;]*;
匹配0+次除;
以外的任意字符
-
-
){8}
关闭小组并重复8次 -
[^;]*
匹配0+次除;
以外的任意字符 -
$
字符串结尾
例如
echo ";asdf;asdfsadf;sdafasdf;asdfsdfasd;;;;" | sed -E 's/^([^;]*;){8}[^;]*$/ /'
,
这应该可以解决问题:
^([^;]*?;[^;]*?){8}$
测试here
echo ";asdf;asdfsadf;sdafasdf;asdfsdfasd;;;;" | sed -E 's/^([^;]*?;[^;]*?){8}$/REPLACEMENT_WORD/gm;t;d'```
具有8个;
输出
REPLACEMENT_WORD
和
echo ";asdf;asdfsadf;sdafasdf;asdfsdfasd;;;;;" | sed -E 's/^([^;]*?;[^;]*?){8}$/REPLACEMENT_WORD/gm;t;d'```
使用9 ;
不会输出任何内容。