最近在shell对文本进行操作,遇到了使用sed进行最小匹配的问题。sed默认匹配规则是贪婪匹配。举例来说,如果文本内容为:(aa)bb(cc)使用sed匹配:'/(.*)/'匹配结果为:(aa)bb(cc)上述结果即贪婪匹配。最小匹配的结果是获取规则字符串之间的最小内容,即为:(aa) (cc)这两个结果。sed获取最小匹配的方法:1.通过...
grep 匹配 是linux的最常用的shell命令之一。 grep的 匹配 的默认 匹配 为单行 匹配 贪婪 匹配 ,因此需要特殊的技巧将其转化为多行 匹配 最小 匹配 。 多行 匹配 : grep -zoe "start-string.*stop-string" file 最小 匹配 的方法与 sed 最小 匹配 的方法相同: grep -o "strart-string[^stop-string]*stop-string...
sed 里面默认走的是最大 匹配 sed 删除的时候如果行当中多次出现()这种情况,这种情况下会最大化的 匹配 (),从而将我们需要的字符也去除,这不是我们要的结果,如下面这个例子 文件aaa内容如下: wt_yunnan    1.1.1.1(wt__pic_zu1),    2.2.2.2(wt_pic_zu8),3.3.3.3(wt_pic_zu3), Pakistan_PTCL    4.44...
目前为止,我们只执行了简单的 字符串 替换 。虽然这很方便,但是我们还可以 匹配 规则表达式。例如,以下 sed 命令将 匹配 从 '' 结束、并且在其中包含任意数量字符的短语。下例将删除该短语(用空 字符串 替换 ):   $ sed -e 's///g' myfile.html    这是要从文件除去 HTML 标记的第一个很好的 sed 脚本尝试,但是由于规则表达式的特有规则,它不会很好地工作。原因何在?当
因为其采用了 贪婪 匹配 法则,但显然这不是我们想要的。 修改代码如下,将其改为最短 匹配 法则: echo '(abc)Hello(def)World'| sed 's/([^)]*)//g' HelloWorld [1] sed 替换 字符串 贪婪 匹配 最小 匹配 [CSDN] [2] sed 匹配 最短模式的方法 [CSDN]
shell中 sed 利用正则表达式 匹配 字符串 时,默认使用 贪婪 模式,且只有 贪婪 模式,没有非 贪婪 模式。 贪婪 模式: 匹配 最长的 字符串 ,开始尽量早、结束尽量晚 http://blog.chinaunix.net/uid-10540984-id-2954393.html 其中,s表示 替换 操作,/要 替换 字符串 /表示需要 替换 字符串 模式,/ 替换 后的 字符串 /表示 替换 后的 字符串 模式,g表示全局 替换 。 例如,将文件example.txt中的所有"Hello" 替换 为"Hi",可以使用以下命令: sed 's/Hello/Hi/g' example.txt 如果要直接修改文件内容,可以使用-i选项,例如: sed -i 's/Hello/Hi/g' example.txt 这个命令会直接将example.txt文件中的所有"Hello" 替换 为"Hi",并保存文件。