希望在服务器上运行脚本以查看文件路径并替换与 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 TEXT
与 viewers
, _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/