微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash脚本来replace单词

试图在服务器上运行一个脚本来查看一个文件的path,并replace一个单词,而它匹配在div中。

因此,需要将作者等于某个电子邮件[email protected]的查看者replace为_toself

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'>[email protected]</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'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_viewers</div> <div class='num'>4</div> </div>

bash脚本将输出分配给variables失败

如果在Ubuntu上安装了多个Java版本,如何检查Oracle Java版本

如何使用文件在几个文件夹中自动化我的三个bash脚本?

将CSV中的第三个字段与GNU Linux(AWK / SED / GREP)中的模式文件进行匹配

如何使用“make mrproper”命令? 我正在从头开始从事Linux

Bash:在行尾find尾随空格的文件

从Java调用脚本,接收到sigpipe信号

Shell脚本ssh $ SERVER >> EOF

我可以创build一个bash脚本,它依赖于shell中以前执行的命令的退出代码吗?

击。 删除所有文件和目录,但某些

这sed解决方案可能会为你工作:

sed -e '/^<div class=.entry.>/,_^</div>_{//!{H;d};_^</div>_!{h;d};x;/author.>[email protected]/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.>[email protected]则用SUBSTITUTE TEXT代替_toself ,多行被打印出来,然后PS代替HS,然后打印出来。

我们有一些文字

$> cat ./text <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'>[email protected]</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'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_viewers</div> <div class='num'>4</div> </div>

而且我们需要用viewers来替换_toself的价值,但是只能在div中,其中'author'等于[email protected]

我认为sed可以帮助你,但你应该有一些经验,用sed语法来制定所有的条件。

因此,我们可以在while循环中读取文件,只有当作者的值等于某个电子邮件时,才能将其剪切为一个div块,并将其中一个值更改为另一个值。

#!/bin/bash mail="[email protected]" to_value_old=_toself to_value_new=viewers while IFS= read -r line; do if [[ -z "$( echo "$line" | grep -o -P "^</div>$" )" ]]; then entry_block="${entry_block}${line}n" else entry_block="${entry_block}</div>n" entry_block="$( echo -e "${entry_block}" )" if [[ -n "$( echo "${entry_block}" | grep -P "<div class='author'>${mail}</div>" )" ]]; then entry_block="$( echo "${entry_block}" | sed -r -e "s/<div class='to'>${to_value_old}</div>/<div class='to'>${to_value_new}</div>/" )" fi echo "${entry_block}" entry_block="" fi done < ./text

我们得到

$> ./div.sh <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'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>viewers</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'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_viewers</div> <div class='num'>4</div> </div>

完成。

如果你只想用别的东西代替所有的事情,那么sed就会完成这个工作。

sed 's/_toself/replacement_string/'

如果你只想在指定的author的div内做到这一点,那么它会更棘手一些。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐