加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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>在一个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读