regex – Linux sed命令不会更改目标文件
发布时间:2020-12-13 23:23:52 所属栏目:Linux 来源:网络整理
导读:使用我的 shell脚本,当我运行./Test1 hello结果时. 它应该以标准输入和结果作为标准输出. shell应该在 td, / td和abc之前删除任何空格 所以,我这样编写脚本 tr -d [:blank:] $1grep -r "td" $1 | sed -r 's/td//g' $2sed -r 's//td//g' $2sed -r 's/abc//g'
使用我的
shell脚本,当我运行./Test1 hello结果时.
它应该以标准输入和结果作为标准输出. shell应该在< td>,< / td>和abc之前删除任何空格 所以,我这样编写脚本 tr -d [:blank:] < $1 grep -r "<td>" $1 | sed -r 's/<td>//g' > $2 sed -r 's/</td>//g' $2 sed -r 's/abc//g' $2 但是,当我运行此命令时,结果文件的内容与hello文件的内容完全相同(唯一的区别是删除了空格) 文件hello内容: <td>hello</td> <td>hello</td> <td>hello</td> <td>abc</td> <td>abc</td> 如何让sed将更改应用于目标文件? 解决方法
如果要将更改从sed存储回文件,请使用-i选项:
$cat file <head>abc</head> <td>hello</td> <td>hello</td> <td>hello</td> <td>abc</td> <td>abc</td> <h1>abc</h1> $sed -ni '/<td>/{s/^s*//;s/abc//;s/</?td>//g;p}' file $cat file hello hello hello 编辑:如果我们使用与sed不同的分隔符并使用扩展的regexp选项-r,则regexp更清晰: $sed -r 's_</?td>__g' file hello hello hello abc abc 的?使前一个字符可选,因此/不必存在使正则表达式匹配< td>和< / td>在一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |