linux - bash 脚本来替换单词

标签 linux bash

希望在服务器上运行脚本以查看文件路径并替换与 div 中匹配的单词。

因此需要将 _toself 替换为作者等于某个电子邮件 test@example.com 的观众

URL=/var/www/sever/temp/fhyw1 FILE=user.txt

<div class='entry'>
  <div class='pageurl'>temp/fhyw1</div>
  <div class='context'>text</div>
  <div class='subject'>testing</div>
  <div class='notetext'></div>
  <div class='signed'>USER</div>
  <div class='author'>test@example.com</div>
  <div class='color'>0</div>
  <div class='visibility'>shared</div>
  <div class='to'>_toself</div>
  <div class='num'>4</div>
</div>
<div class='entry'>
  <div class='pageurl'>temp/fhyw1</div>
  <div class='context'>text</div>
  <div class='subject'>testing</div>
  <div class='notetext'></div>
  <div class='signed'>USER</div>
  <div class='author'>user@example.com</div>
  <div class='color'>0</div>
  <div class='visibility'>shared</div>
  <div class='to'>_viewers</div>
  <div class='num'>4</div>
</div>

最佳答案

这个 sed 解决方案可能适合你:

 sed -e '/^<div class=.entry.>/,\_^</div>_{//!{H;d};\_^</div>_!{h;d};x;/author.>test@example.com/s/_toself/SUBSTITUTE TEXT/;p;x}' text_file

注意您将需要替换 SUBSTITUE TEXTviewers , _viewers或者什么

sed命令允许除 <div class=.entry.> 之间的所有行和 </dev> ( . 允许单引号 ' 或双引号 " )不变地通过。如果该行以 <div class=.entry.> 开头它被复制到一个称为保持空间(HS)的寄存器,然后模式空间(PS)被删除。所有其他行都附加到 HS,然后删除接受行 </div> .当此行出现时,HS 与 PS 交换,如果此多行包含 author.>test@example.com然后 SUBSTITUTE TEXT被替换为 _toself .无论如何打印多行,然后 PS 替换 HS 并依次打印出来。

关于linux - bash 脚本来替换单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093524/

相关文章:

c++ - 在信号处理程序中使用 SIGRTMIN 和 SIGRTMAX 是否安全?

linux - pip 编译与二进制文件

linux - 从文件中的字段中删除多行字符串

bash - openssl enc -base64 -d 在一定长度后不解码字符串

linux - 使用 sendmail 脚本时获取空文件作为附件

linux - 如何为这种情况编写 Grep 命令?

mysql - 从 sample.sql 文件导入的数据的日志文件

bash - 通过堡垒服务器在私有(private) IP 上使用 boto SSH 到 EC2 实例

linux - awk里面期待

未检测到 Bash 参数